it-roy-ru.com

Как отобразить переменную, содержащую неэкранированный знак доллара в bash

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

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

./script.sh "test1$test2"

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

echo ${1}
test1

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

17
Not22

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

./script.sh 'test1$test2'
7
Ignacio Vazquez-Abrams

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

./script.sh "test1\$test2"

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

./script.sh 'test1$test2'

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

29
user405725

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

4
ghostdog74

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

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

0
Benoit