どうすればいいですか
set variable (some_command_that_may_return_a_string)
if [ variable is set ]
do_something
逆に、変数が空かどうかを確認するにはどうすればよいですか?
set -q var
(「$」がないことに注意-これは変数nameを使用します)は、変数が設定されているかどうかを確認するために使用できます。
set -q var[1]
は、変数の最初の要素が割り当てられているかどうか(つまり、リストとして空ではないかどうか)を確認するために使用できます。
test -n "$var"
[fn0](または[ -n "$var" ]
)を使用して、変数が空でない文字列(およびtest -z
は逆です-空の場合はtrue)。
これらは、わずかに異なる状況で真/偽になります。
set var
はまったく実行されており(親プロセスから継承されていない)、set -q var
、set -q var[1]
およびtest -n "$var"
はfalse、test -z "$var"
は真になります。
set var
が行われた(追加の引数なし)、set -q var
は真、set -q var[1]
はfalseになります。
set var ""
が完了しました。両方のset
バージョンがtrueになります。
set var "somestring"
(あるいは set var "" ""
[fn1])が行われた場合、set
sはtrueになり、test -z "$var"
はfalseになります。
[fn0]:あなたnevertest
(または[
)変数を引用符で囲まずに。特にひどい例として、test -n $var
は、変数に何かが含まれている場合と、リストが空または未設定の場合(set
がまったくない場合またはset var
引数なし)。これは、魚のtest
がPOSIXに続く数少ないパーツの1つであり、任意の1つの引数を持つtest
がtrueであることを要求するためです。また、リストを適切に処理しません-test -n $var
は、varに複数の要素がある場合、奇妙な結果になります。
[fn1]:これは、要素をスペースで結合することによりリストが文字列として展開されるため、2つの空の文字列で構成されるリストが「」-1つのスペースに展開されるためです。空ではないので、test -z
はfalseを返します。