Если я передам bash-скрипту параметр в командной строке, я смогу использовать его в качестве значения позже в скрипте. Однако если я запрошу ту же строку с помощью read, я получу другое значение.
Пример:
./test.sh utrre$fdg.dsf88^
#!/bin/bash
var=$1
read -e "Enter password: " test
if [ "$var" = "$test" ]; then
echo "Password match"
else
echo "Password not match"
fi
Но я всегда получаю Password not match
. Я предполагаю, что это связано с тем, что в строке есть специальные знаки. Как я могу иметь оба совпадения?
echo utrre.dsf88^ | ./script utrre$fdg.dsf88^
работает, но вы должны понимать, почему в аргументе echo
опускается $fdg
. Вы также можете сделать: echo 'utrre$fdg.dsf88^' | ./script 'utrre$fdg.dsf88^'
@NahuelFouilleul: В задании RHS не нужно заключать в кавычки, если это просто расширение параметра. Попробуйте x = "a b c"; y=$x; echo "$y"
@Angled: вы можете легко отладить подобные ошибки, запустив скрипт с помощью bash -x ./test.sh utrre$fdg.dsf88^
.
Проблема в том, что вы вызываете скрипт:
./test.sh utrre$fdg.dsf88^
$
— специальный символ, который интерпретируется оболочкой как переменная.
Поскольку $fdg
скорее всего не существует, ваш скрипт получает utrre.dsf88^
в качестве параметра.
Вы можете проверить это, добавив echo "var=$var"
после установки переменной и убедитесь сами.
Чтобы решить проблему, используйте простую кавычку, чтобы предотвратить расширение переменной при вызове test.sh
:
./test.sh 'utrre$fdg.dsf88^'
А еще мне кажется, что в тексте опечатка:
read -sp "Enter password: " test # -p to set prompt instead of -e / -s to hide password
echo # with -s, no new line is inserted so add it here
В вашем случае параметр командной строки должен быть заключен в одинарные кавычки. Для получения более подробной информации: gnu.org/software/bash/manual/html_node/Shell-Expansions.html