Zshと同等のものは何ですか: ${VAR:=value}

Zshと同等のものは何ですか: ${VAR:=value}

既存のBourne Shell(sh)では、スクリプト内の特定のポイントで変数が設定されていて、少なくとも特定のデフォルト値があることを確認したい場合は、次の設定を使用できます。

: "${VAR:=defaultValue}"

Zshスクリプトと同等のものは何ですか?

ありがとうございます。

編集:これを行うZshに特定の方法がある場合を意味します。実際のコマンド(:)を実行する代わりに。

Edit2:正しく引用されたパラメータ拡張。 Stéphane Chazelasの回答を参照してください。

答え1

実際、

: ${VAR:=defaultValue}

zshこれは(このオプションを有効にしないと仮定すると)本当ですが、globsubst他のシェルではそうではありません。 Bourne などの他のシェルでは、次のnoglobオプションを有効にしないとサービス拒否の脆弱性が発生します。bash / POSIXシェルで変数を引用することを忘れてしまうセキュリティリスク

このうち、あなたに必要なもの

: "${VAR:=defaultValue}"

zshこれらの Bourne 演算子は実際にサポートされており、一部の独自の演算子も同じ方法で導入されます。

  • ${VAR::=value}無条件value変数に割り当てられます(そして結果として展開されます)。zshこれは、他のパラメータ拡張演算子またはフラグと組み合わせることができるので便利です。
  • ${:-value}(つまりVAR省略)はに拡張されますvalue。他の演算子と組み合わせるときにも便利です。

別のオプションは次のとおりです。

VAR=${VAR:-defaultValue}

これはzshや他のすべてのBourne様シェルでは大丈夫で、意味をより明確に伝えます。

関連情報