Shell-Script

{#array} 與{#array} 與{#array} vs{#大批@@@}

  • December 2, 2015

據我所知,${#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[@]也更喜歡它,因為它的行為不會根據它是否出現在引號內而改變。元素可能具有的那個和內部空白被保留。

引用自:https://unix.stackexchange.com/questions/80803