Интерполяция знака доллара внутри кавычек в bash

9

Я запускаю этот маленький тестовый скрипт, который я написал:

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

из командной строки:

./test.sh "1092$212"

но знак доллара снимается. Если я убегу, это сработает. Но я думал, что двойные кавычки защитят меня от необходимости делать это. Может кто-нибудь, пожалуйста, помогите мне понять, что происходит и как это исправить?

Амир Афганский
источник
Проблема в том, что это неоднозначно - даже для меня как человека - то, что вы хотите здесь, поэтому у компьютера нет шансов. Возможно, интерпретатор bash пытается получить $ 212. Bash молча терпит неудачу, если вы пытаетесь раскрыть переменную, которая не существует, таким образом, $ удаляется. Попробуйте заключить переменные в квадратные скобки, например, «1092 $ {2} 12»
Брайан Петерсон

Ответы:

18

Переменные по-прежнему раскрываются в двойных кавычках. Если вы хотите избежать такого поведения, вы должны вместо этого использовать одинарные кавычки.

Калеб
источник
Спасибо. Это работает. Есть причина для этого?
Амир Афганский
8
Да. Это было разработано таким образом! На самом деле очень полезно иметь возможность раскрывать переменные внутри строки в кавычках. Это особенность. Если вам не нужно поведение, используйте одинарные кавычки, для этого они и предназначены.
Калеб