我刚刚注意到我可以写:
for i in $(sort $path); do
echo $i
done
它的打印效果非常好。但是当谈到阵列时:
arr=(i am array)
for i in $arr; do
echo $i
done
# output (bash)
i
# outpus (zsh)
i
am
array
所以我必须用以下内容扩展数组:
for i in ${arr[@]}; do
echo $i
done
#output (bash)
i
am
array
我怀疑sort
和ls
只返回带有空格的普通字符串而for
语句只是以空格作为分隔符循环,我错了吗?那么我应该使用带空格的字符串来循环而不是数组吗?
我不太了解技术术语,对不起令人困惑的问题。
提前谢谢。
答案 0 :(得分:2)
来自bash
手册页:
for name [ [ in [ word ... ] ] ; ] do list ; done
The list of words following in is expanded, generating a list of
items. <...>
因此,当您编写for i in ${arr[@]}
或for i in $(sort $path)
时,shell会替换list
代替扩展,而for
会在该列表中替换items
由IFS
的第一个字符分隔的,它是一个默认为空格的特殊变量。
因此,您部分正确:for
以空格作为分隔符进行循环,但sort
和ls
都不返回以空格分隔的字符串。就此而言,运行ls | xxd
以查看输出的二进制转储 - 目录中的文件名由0x0a
分隔,这是换行符的ASCII。