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


9

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

#!/bin/bash

TESTCASE=$@
testHarness <<runTest
$TESTCASE
runTest

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

./test.sh "1092$212"

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


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

Ответы:


18

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


Спасибо. Это работает. Есть причина для этого?
Амир Афганский

8
Да. Это было разработано таким образом! На самом деле очень полезно иметь возможность раскрывать переменные внутри строки в кавычках. Это особенность. Если вам не нужно поведение, используйте одинарные кавычки, для этого они и предназначены.
Калеб
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.