コマンドラインで特定の環境変数が設定されているかどうか疑問に思います。空の文字列(または単に空白)に設定されているものとまったく設定されていないものを区別する必要があるため、設定されていない場合は何も印刷せずに明示的なtrue / falseまたはYes / Noを取得したいと思います。
スクリプトで使用できることはわかっていますが、-z
コマンドラインから直接これを実行できるかどうかはわかりません。
私はこれを試しました:
$ echo -z "${MY_URDSFDFS}"
しかしそれはただ次のように印刷されます:
-z
答え1
次のフォームを使用してください。${VAR+TEXT}
パラメータ拡張。設定しなければ空で${VAR+1}
、設定されていれば空であっても同じです。 (設定されていない場合は空または空、設定されている場合はnull以外の値です。)VAR
1
VAR
${VAR:+1}
VAR
1
VAR
if [ -n "${MY_URDSFDFS+1}" ]; then
echo "\$MY_URDSFDFS is set"
else
echo "\$MY_URDSFDFS is not set"
fi
これは、すべてのPOSIXまたはBourneシェル、つまりすべての最新および最古のsh方言に適用されます。
これは環境変数とシェル変数を区別しません。エクスポートされていないシェル変数を拒否する必要がある場合は、別のプロセスでそれをテストできますsh -c 'test -n "${MY_URDSFDFS+1}"'
。しかし、これが問題になる場合はほとんどありません。
時には変数の設定を解除するのが不便で、時には変数を空の文字列に設定するのが不便であるため、これは一般的に悪い考えです。通常、空の環境変数は設定されていない環境変数と同じように処理する必要があります。
答え2
シェルでzsh
変数が設定されているかどうかをテストするために、標準に加えて設定すると1に展開され、それ以外の場合は0に拡張される場所を[ -n "${var+set}" ]
使用できます。(( $+var ))
$+var
$var
以前に設定されていない間にzsh
実行すると、実行またはシミュレーション(これらの変数をエクスポートすることは意味がありません)を除いて値が自動的に割り当てられます(数値変数の場合は0、配列/ハッシュ変数の空のリスト)。そうでない場合はリストされます)、これらのテストはtrueを返します。export var
$var
zsh
sh
ksh
変数が設定されていて環境にあるかどうかをテストするには、次のようにします。
if [[ -$parameters[var]- = *-export-* ]]; then
echo var is set and exported to the environment
fi
(または${(t)var}
代わりに$parameters[var]
)。
また、見ることができます「if文に変数が存在するかどうかを確認するにはどうすればよいですか?」への答えです。その問題についてさらに検討するために。