Как отобразить переменную, содержащую неэкранированный знак доллара в bash - PullRequest
17 голосов
/ 13 октября 2010

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

Например, что-то вызывает скрипт:

./script.sh "test1$test2"

и затем, если я захочу использовать параметр, он будет "усечен" примерно так:

echo ${1}<br> test1

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

Ответы [ 4 ]

30 голосов
/ 13 октября 2010

Проблема в том, что сценарий в первую очередь получает «test1», и он не может знать, что была ссылка на пустую (необъявленную) переменную.Вы должны экранировать $ перед передачей в скрипт, например:

./script.sh "test1\$test2"

Или использовать одинарные кавычки ', например:

./script.sh 'test1$test2'

В этом случае bashне будет расширять переменные из этой строки параметров.

7 голосов
/ 13 октября 2010

Переменная заменяется до запуска скрипта.

./script.sh 'test1$test2'
4 голосов
/ 13 октября 2010

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

0 голосов
/ 13 октября 2010

Как сказал Игнасио, переменная заменяется, поэтому ваши сценарии получают ./script.sh test1 в качестве значений для $0 и $1.

Но даже в том случае, если вы использовали буквальные кавычки для передачиаргумент, вы всегда должны цитировать "$1" в вашем echo "${1}".Это хорошая практика.

...