为什么这个模式替换不适用于数组?

为什么这个模式替换不适用于数组?

对于变量 z

z="I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX"
echo "${z// /,}"

输出I,II,III,IV,V,VI,VII,VIII,IX,X,XI,XII,XIII,XIV,XV,XVI,XVII,XVIII,XIX,XX正常。

但对于

Y=(I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX)

echo "${Y[@]// /,}"

输出是I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX

答案1

因为对于

Y=(I II III IV)

如果你这样做:

"${Y[@]// /,}"

数组中每个元素的所有空格都将重新替换为,

例如:

$ Y=('I foo' 'II bar' III IV)

$ echo "${Y[@]// /,}"
I,foo II,bar III IV

由于数组的任何元素中都没有空格,因此不需要替换任何内容。

相关内容