パラメータが空の文字列に設定されているかどうかをテストする方法は?

パラメータが空の文字列に設定されているかどうかをテストする方法は?

パラメータが空の文字列かどうかをテストしたいです""

このパラメータが設定されていないと、テストは失敗します。

  1. 次のタスクが成功しなかったのはなぜですか?

    $ unset aa
    $ if [ ${aa}=="" ]; then echo yes; else echo no; fi
    yes
    
  2. どうすればいいですか?

ベストアンサー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 testbash

-v VARVARシェル変数が設定されている場合は真です。

またはbashマニュアルの「条件式」セクションで:

-v varname

シェル変数が設定されている場合varname(値が割り当てられている場合)真。

テストでは-v変数をテストできます。名前その価値を見るよりも


本当に文字列比較をしたい場合は、できる次のようなことをする

if [[ "${aa-InvalidValue}" != "InvalidValue" ]] && [ -z "$aa" ]; then
    echo Set but empty
fi

設定しないと、拡張子が${variable-value}拡張されます。valuevariable

非常に似た内容がif is unset${variable:-value}に拡張されます。valuevariableまたは空(空の文字列).

おすすめ記事