Shell-Script
{#array} 與{#array} 與{#array} vs{#大批@@@}
據我所知,
${#array[@]}
並${#array}
評估$array
. 是否有任何理由偏愛較長的形式 (${#array[@]}
)?
在zsh中,個人喜好。在其他 shell
$array
中可能只擴展到第一個元素,因此${#array}
會輸出第一個元素的長度。所以,如果你想在指定的 shell 之間更便攜一點,
[@]
那就可以了。在 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
很少需要改變,這促使了我最初的“個人偏好”回應。但只是為了澄清在不使用標誌的情況下兩者之間存在一些差異#
,它們非常微妙。我
$array[@]
也更喜歡它,因為它的行為不會根據它是否出現在引號內而改變。元素可能具有的那個和內部空白被保留。