./test.sh -p Admin$2014
此处-p
指定密码标记,密码为Admin$2014
在我的脚本中,我将$2
收集到名为PASSWORD的变量中。即。
PASSWORD="$2"
当我使用echo命令
阅读时echo "Password: $PASSWORD"
输出:
Password: Admin014
=====
请告诉我如何使命令行参数像字符串常量一样。
==============
工作案例是: 情况1:
./test.sh -p 'Admin$2014'
情况2:
./test.sh -p Admin\$2014
在上述两种情况下,我能够得到正确的结果,但我不想在密码中输入任何其他字母。
答案 0 :(得分:1)
当你引用或逃避字符串时,你不是“在[密码]中输入任何其他字母。”
你无法让shell神奇地知道你不希望它特别按照你想要的方式解释那个参数中的shell元字符。 (这就是引用和逃避的原因。)
除了要求引用之外,最好的解决方案就是不要为脚本使用命令行参数,而是使用脚本中的read -rsp 'Password: ' PASSWORD
让脚本提示输入密码。
read
读取的参数不受shell评估/扩展/等的影响。所以shell元字符不会引起问题。
使用-r
也会禁用读取输入中的反斜杠转义。
使用-s
将导致输入不会回显到屏幕(就像大多数密码提示一样)。
使用read
还会产生副作用,即在脚本运行时保持密码在ps
等输出中不可用。