bashから読み取った単一文字の予期しない入力をキャッチする

bashから読み取った単一文字の予期しない入力をキャッチする

時々、ユーザーに確認を要求するbashスクリプトがあります。単一文字を読み、それを小文字に変換して「y」であることを確認してこれを行います。そうでない場合、スクリプトは終了します。

これで、読み取り入力でEnterキーを押すと、error: unary operator expectedこの問題を回避したりエラーをキャッチしたりできますか?

コードセグメント:

echo -ne "Confirm [y/n]: "
read -n1 uc

if [ ${uc,,} != "y" ]
then
    exit 0
fi

答え1

次の文は正常に動作します。

if [ "${uc,,}" != "y" ]

説明:uc空の場合、テストは次のようにシェルによって拡張されます。

if [  != "y" ]

そして引用符があるのは

if [ "" != "y" ]

経験則:いつも文字列を含むシェル変数を展開するときは、引用符を使用してください。空白が含まれているか空白になる可能性があり、引用符がないと、渡されたコマンドが混乱することがよくあります(引数が多すぎるか、引数が欠落しています)。

関連情報