我这里有一个包含此代码段的脚本:
read -p ">" DEPLOY_CONFIRM
if [ "xy" != "x$DEPLOY_CONFIRM" ] ; then
.. snip ..
fi
在进行比较之前添加x是否重要?我的猜测是防止用户输入以有趣角色开头的东西。
答案 0 :(得分:4)
使用已知的常量文字x
为每个变量和文字加上前缀是在旧的shell脚本中完成的,同时使用未加引号的变量再次保护unary operator expected
之类的错误。
只要你使用引用变量,你就不需要这个前缀为x
的技巧。
所以你可以在BASH中很好地使用它:
read -p ">" DEPLOY_CONFIRM
if [[ "$DEPLOY_CONFIRM" == [Yy] ]]; then
.. snip ..
fi
要生成此错误,请使用以下代码段:
unset s
[ "y" = $s ] && echo "matched"
-bash: [: y: unary operator expected
然后看到使用x
前缀改进的行为:
[ "xy" = x$s ] && echo "matched"
答案 1 :(得分:0)
在比较始终不会出现语法错误的字符串时,您始终可以使用双引号。
[ "y" = "$s" ] && echo "matched"