パラメータが空の文字列かどうかをテストしたいです""
。
このパラメータが設定されていないと、テストは失敗します。
次のタスクが成功しなかったのはなぜですか?
$ unset aa $ if [ ${aa}=="" ]; then echo yes; else echo no; fi yes
どうすればいいですか?
ベストアンサー1
(試した)テストは、$aa == ""
2つの空の文字列を互いに比較することによって実際の結果を生成します。これは、シェルが設定されていない変数を空の文字列に拡張するためです。周囲にスペースがない場合は、両方の==
文字列のテストと同じであるため、テストは常にtrueです==
。この文字列は常に真です。
代わりにbash
:
$ unset aa
$ if [ -v aa ]; then echo Set; else echo Not set; fi
Not set
$ aa=""
$ if [ -v aa ]; then echo Set; else echo Not set; fi
Set
したがって、空の文字列の完全なテストは次のとおりです。
if [ -v aa ] && [ -z "$aa" ]; then
echo Set but empty
fi
からhelp test
:bash
-v VAR
VAR
シェル変数が設定されている場合は真です。
またはbash
マニュアルの「条件式」セクションで:
-v varname
シェル変数が設定されている場合
varname
(値が割り当てられている場合)真。
テストでは-v
変数をテストできます。名前その価値を見るよりも
本当に文字列比較をしたい場合は、できる次のようなことをする
if [[ "${aa-InvalidValue}" != "InvalidValue" ]] && [ -z "$aa" ]; then
echo Set but empty
fi
設定しないと、拡張子が${variable-value}
拡張されます。value
variable
非常に似た内容がif is unset${variable:-value}
に拡張されます。value
variable
または空(空の文字列).