Используйте двойные кавычки вокруг переменных расширения внутри вашего скрипта:
read INPUT
echo "Password was: $INPUT"
if [ $(echo -n "$INPUT" | wc -m) -ge 6 ]
then echo "OK"; exit 0
else echo "Bogus"; exit 1
fi
Во время разработки скрипта используйте echo
, чтобы показать, с чем вы работаете, но также используйте двойные кавычки.
Если вы наберете строку в этой программе, не будет никакого расширения оболочки для набираемых символов.Если вы моделируете пользователя, набирающего echo
, то вам нужно запретить оболочке, которая выполняет echo
, расширять любые метасимволы, таким образом:
echo 'gra$$' | bash yourscript
Пропуск одинарных кавычек означает, что оболочка заменит$$
с PID (вероятно, PID родительской оболочки, а не оболочки в конвейере, но с некоторым PID).Это отличается от того, что вы набираете 5 символов плюс символ новой строки после запуска:
bash yourscript
Вы также можете использовать:
$ cat > password-file
gra$$
<control-D>
$ cat password-file
gra$$
$ bash yourscript < password-file
<control-D>
- это указатель EOF;он сбрасывает все нулевые символы, введенные с момента ввода последней новой строки, и cat
интерпретирует нулевые байты, доступные как EOF.Таким образом, файл содержит 6 символов: буквы g
, r
, a
, два знака $
и символ новой строки.Это будет прочитано вашим сценарием дословно;не будет никакого расширения данных.