Подтвердить что ты не робот

Как эхо-переменная, содержащая знак неустановленного доллара в bash

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

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

./script.sh "test1$test2"

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

echo ${1}
test1

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

4b9b3361

Ответ 1

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

./script.sh 'test1$test2'

Ответ 2

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

./script.sh "test1\$test2"

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

./script.sh 'test1$test2'

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

Ответ 3

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

Ответ 4

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

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