bashテストbultinの後にスペースがありません - 正しい構文または定義されていませんか?

bashテストbultinの後にスペースがありません - 正しい構文または定義されていませんか?

今日の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空でない文字列です。

おすすめ記事