複数の変数が設定されているかテスト

複数の変数が設定されているかテスト

スクリプトのある時点で、構成ファイル以降に複数の変数が設定されていることを確認しsource、設定されていない場合、ユーザーに欠落している変数について知らせる実行を停止したいと思います。頑張りました

for var in $one $two $three ; do
    ...

ただし、exampleが$two設定されていないと、forループは実行されません$two。私が試した後、

for var in one two three ; do
    if [ -n ${!var} ] ; then
        echo "$var is set to ${!var}"
    else
        echo "$var is not set"
    fi
done

ただし、2が設定されていない場合でも、「2が設定されていません」の代わりに「2に設定されています」と表示されます。

すべての必須変数が設定されているかどうかを確認できますか?

アップデート/ソリューション:「セット」と「セットですが空」の違いがあることを知っています。今使っています(ありがとうございますhttps://stackoverflow.com/a/16753536/3456281そして、この質問に対する答え)は次のようになります。

if [ -n "${!var:-}" ] ; then

したがってvar、設定されているが空の場合はまだ無効と見なされます。

ベストアンサー1

引用エラーです。

if [ -n "${!var}" ] ; then

将来の保証:設定

set -x

コードを実行する前に問題が表示されます。コードに追加する代わりに、次のようにスクリプトを呼び出すことができます。

bash -vx ./my/script.sh

おすすめ記事