コマンドラインで特定の環境変数が設定されているかどうか疑問に思います。空の文字列(または単に空白)に設定されているものとまったく設定されていないものを区別する必要があるため、設定されていない場合は何も印刷せずに明示的な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}"'
。しかし、これが問題になる場合はほとんどありません。
時には変数の設定を解除するのが不便で、時には変数を空の文字列に設定するのが不便であるため、これは一般的に悪い考えです。通常、空の環境変数は設定されていない環境変数と同じように処理する必要があります。