${#array}と${#array[@]}

${#array}と${#array[@]}

私が知る限り、の要素数を評価${#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[@]また、引用符で囲まれているかどうかに応じて動作が変わらないので、これを好みます。要素に存在できるすべてのスペースと内部スペースは保持されます。

おすすめ記事