時々、ユーザーに確認を要求する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" ]
経験則:いつも文字列を含むシェル変数を展開するときは、引用符を使用してください。空白が含まれているか空白になる可能性があり、引用符がないと、渡されたコマンドが混乱することがよくあります(引数が多すぎるか、引数が欠落しています)。