【发布时间】:2012-03-02 04:16:15
【问题描述】:
我正在编写一个 bash 脚本,它将通过 STDIN 接收密码并进行一些不同的检查。
我在使用包含符号的密码时遇到问题。
普通密码grassy 是可以的,但是像gra$$y 这样的复杂组合会扩展为gra3308y。
这是我正在使用的脚本:
read INPUT
if [ $(echo -n $INPUT|wc -m) -ge 6 ]
then exit 0
else exit 1
fi
我尝试了各种不同的引用,但我无法阻止 STDIN 密码扩展特殊字符。
这是一个例子,没有在原始值周围加上单引号,可以做些什么来解决这个问题?
david@hostname ~ $ echo gra$$| { read INPUT; echo ${INPUT}; }
gra2598
【问题讨论】:
-
扩展它的不是标准输入,而是调用 'echo' 时的 shell ...一种可能的方法是将其存储到一个临时文件和
shred -u该文件中。另一种方法是以偷偷摸摸的方式申请eval和sed... -
实际上,当您在 STDIN 上输入
gra$$时,您从 STDIN 读取的原始脚本工作正常,但您的测试命令当然会在$$甚至在 INPUT 变量中读取之前扩展。 -
还要注意
read在输入中吃反斜杠,除非你使用-r。