我在ksh中有一个Shell脚本,在输入输入后,脚本要求输入Y表示是,N表示否,以便检查输入并继续。以下是该脚本的一部分:
echo ""
YN=""
while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ]; do
echo -n "Please confirm (y/n): "
read YN
done
if [ "x$YN" = "xn" -o "x$YN" = "xN" ]; then
exit 0
fi
我无法理解
while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ];
在这方面可以和我一起帮助我。
答案 0 :(得分:1)
实际上这应该写成:
while [ "$YN" != "n" -a "$YN" != "N" -a "$YN" != "y" -a "$YN" != "Y" ];
但是如果变量$YN
为空,那么如果使用一些shell,则会导致错误。因此,进行比较的安全方法是在比较的两边在双引号内附加一个虚拟字符(以便它们相互抵消),如:
while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ];
即使$YN
为空,也不会中断。