$==*
私は私が使用したいくつかのzshソリューションでこのイディオムを見つけました。と同等のようです$argv
。しかし、どのように説明されるのかわかりません。説明してもらえますか?
答え1
これはZshの一つですパラメータ拡張これは以下に適用されます$*
。
${=spec}
は、 SH_WORD_SPLIT ルールを使用してspec評価プロセス中に単語分割を実行しますが、パラメータが二重引用符で表されるかどうかには関係ありません。「=」が倍になると閉じます。これにより、IFSを区切り文字として使用して、置換の前にパラメータ拡張が別の単語に分割されます。他のほとんどのシェルでは、これは基本的に行われます。
Gillesの一般的に徹底的な答えを参照してください噴射とは何ですか?シェルプログラミングではなぜ重要なのですか?文脈のために。
一般に、zsh
単語の分割は基本的には行われないため、$*
オプションが何らかの方法で有効になっていても(例えば、aを介して)分割されないようにすることができます。SH_WORD_SPLIT
emulate sh
しかし、ほとんどの場合、次のよう"$@"
に拡張されます$==*
。$==*
$*
SH_WORD_SPLIT
空ではない位置引数、whileは"$@"
すべての位置引数に展開されます(、に関係なくSH_WORD_SPLIT
すべてのBourne様シェルに適用されます)。