私が知る限り、の要素数を評価${#array[@]}
します。長い形式()を選択した理由はありますか?${#array}
$array
${#array[@]}
ベストアンサー1
zshでは個人的な好みです。他のシェルでは、$array
最初の要素にのみ拡張できるため、最初の${#array}
要素の長さが出力されます。
したがって、シェル間でより多くの移植性が必要な場合は、それを指定することをお勧め[@]
します。
zshでは、引用符で囲まれているかどうかに応じて$array
同じ方法で拡張が行われます。$array[*]
二重引用符内にある場合、デフォルトでは空白の"$array"
最初の文字に展開され、区切ります。IFS
zsh% touch {1..10}; a=(*)
zsh% printf '<%s> ' $a
<1> <10> <2> <3> <4> <5> <6> <7> <8> <9>
zsh% printf '<%s> ' "$a"
<1 10 2 3 4 5 6 7 8 9>
zsh% IFS=:
zsh% print "$a"
1:10:2:3:4:5:6:7:8:9
zsh% print "$a[@]"
1 10 2 3 4 5 6 7 8 9
zsh% IFS=$' \t\n'
zsh% rm "$a"
rm: cannot remove ‘1 10 2 3 4 5 6 7 8 9’: No such file or directory
IFS
変更する必要がほとんどないので、初期の「個人的な好み」の応答が引き起こされました。しかし、明らかに言えば、flagsなしで2つを使用することにはいくつかの違いがあり、#
非常に微妙です。
$array[@]
また、引用符で囲まれているかどうかに応じて動作が変わらないので、これを好みます。要素に存在できるすべてのスペースと内部スペースは保持されます。