以下は、環境変数にアクセスする方法を示す単純なシェルスクリプトです。
if [[ ${x+X} = X ]] ## If $x is set
then
if [[ -n $x ]] ## if $x is not empty
then
printf " \$x = %s\n" "$x"
else
printf " \$x is set but empty\n"
fi
else
printf " %s is not set\n" "\$x"
fi
しかし、最初の「if条件」について次の質問があります。
- [[演算子内で比較のために単一の"="が使用されます。しかし、=は代入演算子ではありませんか?
- このスクリプトで「${x+X}」が何をしているかを説明できますか?
ベストアンサー1
{ unset x
echo ${x+"you won't see this"}
x=
echo ${x+"this you'll see"} ${x:+"and this you won't"}
x=1
echo ${x+"now you'll"} ${x:+"see it all"}
}
this you'll see
now you'll see it all
実際、すべてのデフォルトのPOSIXパラメータ拡張は、オプションの:
コロン修飾子に従って拡張パラメータが設定されていないか、またはnullの場合、動作が異なります。
+
パラメータ拡張形式は次のように拡張されます。word
拡張の内容に関係なくパラメータを設定するとき:
${parameter+word}
しかし、次に拡張されるわけではありません。word
$parameter
設定時期しかし空以下から:
${parameter:+word}
-
、、、=
の拡張された形もあります?
。-
に拡張される予定です。word
$parameter
いつ未設定、または:
設定されていない、またはnullの場合に使用されます。 null または unset の値を次のように設定する点を除いて、=
同じ方法で拡張されます。-
$parameter
word
。?
オプションの作成中にシェルを終了します。word
$parameter
設定されていない場合はstderrにエラーメッセージを送信し、:
値がNULLの場合はstderrにエラーメッセージを送信します。これら3つのうちの1つが該当する場合$parameter
はいset と with は:
null ではなく、$parameter
他の場合と同様にその値に拡張されます。