Ответ 1
Переменная заменяется до запуска script.
./script.sh 'test1$test2'
Если у меня есть переменная, содержащая знак незаметного доллара, есть ли способ, которым я могу отследить все содержимое переменной?
Например, что-то вызывает script:
./script.sh "test1$test2"
а затем, если я хочу использовать параметр, он будет "усечен" следующим образом:
echo ${1}
test1
Конечно, однократное цитирование имени varaible не помогает. Я не могу понять, как процитировать его, чтобы я мог хотя бы избежать знака доллара, когда script получает параметр.
Переменная заменяется до запуска script.
./script.sh 'test1$test2'
Проблема заключается в том, что script получает "test1" в первую очередь и не может знать, что существует ссылка на пустую (необъявленную) переменную. Вы должны выйти из $
перед тем, как передать его в script, например:
./script.sh "test1\$test2"
Или используйте одинарные кавычки '
следующим образом:
./script.sh 'test1$test2'
В этом случае bash не будет расширять переменные из этой строки параметров.
используя одинарные кавычки, метасимволы, такие как $
, сохраняют свое буквальное значение. Если используются двойные кавычки, имена переменных будут интерполированы.
Как сказал вам Игнасио, переменная заменяется, поэтому ваши сценарии получают ./script.sh test1
как значения для $0
и $1
.
Но даже в том случае, когда вы использовали литеральные кавычки для передачи аргумента, вы всегда указываете "$1"
в своем echo "${1}"
. Это хорошая практика.