2

kshにシェルスクリプトがあります。入力が入力された後、スクリプトは入力を確認して続行するために、はいの場合は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" ];

yoyはこの点で親切に私を助けてくれますか。

4

1 に答える 1

1

実際、これは次のように書く必要があります。

while [ "$YN" != "n" -a "$YN" != "N" -a "$YN" != "y" -a "$YN" != "Y" ];

$YNただし、一部のシェルでは、変数が空の場合、これによりエラーが発生します。したがって、比較を機能させる安全な方法は、次のように、比較の両側の二重引用符の中にダミー文字を追加することです(互いに打ち消し合うように)。

while [ "x$YN" != "xn" -a "x$YN" != "xN" -a "x$YN" != "xy" -a "x$YN" != "xY" ];

$YN空でも壊れません。

于 2012-10-22T12:05:31.683 に答える