今日のbashスクリプトの作成中に小さな間違いをしました。以下のコード
#!/bin/bash
if [ -n "${UNDEFINED_VAR}"]; then
echo 'string not empty'
echo "$UNDEFINED_VAR"
else
echo 'string empty'
fi
戻りstring not empty
と空行。詳しく見ると、]
上記のコードの前にスペースがありません。驚いたことに、bashはunexpected token
構文エラーなしで私のコードをうまく実行しました。余白メモは、[[
大文字の使用時に正しい文法エラーを提供します。
私の質問:私は正当な構文を使わずにbashが望むものは何でも自由に行うことができるので、これは未定義の動作ですか?それとも、非常に予想外の結果を提供する本当に奇妙な法的構文ですか?
ベストアンサー1
設定されていない場合、UNDEFINED_VAR
コマンドは
[ -n "${UNDEFINED_VAR}"]
に拡張される予定です。
[ -n ]
-n
文字列が空ではないため、これは明確に定義されており、trueです。
[
単一引数(無視)に対して実行される基本テスト]
は、空でない文字列をテストすることです。文字列は-n
空でない文字列です。