无法在shell命令行参数中收集给定密码,与我输入的相同

时间:2014-10-08 11:08:19

标签: linux bash shell automation

./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

在上述两种情况下,我能够得到正确的结果,但我不想在密码中输入任何其他字母。

1 个答案:

答案 0 :(得分:1)

当你引用或逃避字符串时,你不是“在[密码]中输入任何其他字母。”

你无法让shell神奇地知道你不希望它特别按照你想要的方式解释那个参数中的shell元字符。 (这就是引用和逃避的原因。)

除了要求引用之外,最好的解决方案就是不要为脚本使用命令行参数,而是使用脚本中的read -rsp 'Password: ' PASSWORD让脚本提示输入密码。

read读取的参数不受shell评估/扩展/等的影响。所以shell元字符不会引起问题。

使用-r也会禁用读取输入中的反斜杠转义。

使用-s将导致输入不会回显到屏幕(就像大多数密码提示一样)。

使用read还会产生副作用,即在脚本运行时保持密码在ps等输出中不可用。