%20%E5%92%8C%20(%E2%80%9C%24(ls)%E2%80%9D)%20%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
(*)
和 和有什么区别("$(ls)")
?
除了分隔符不同之外,它们本质上是相同的吗?
答案1
第一个,(*)
通配符当前目录中的文件和目录列表并创建一个列表。您可以将该列表分配给一个数组变量,每个文件名将是其自己的条目。
touch 'a b' c
d=(*)
printf "> %s <\n" "${d[@]}"
> a b <
> c <
第二个,(“$(ls)”)
,调用ls
以列出当前目录。生成的文件和目录列表被放入单个字符串中并分配给一个列表。该列表包含由换行符分隔的名称集组成的单个元素。
d=("$(ls)")
printf "> %s <\n" "${d[@]}"
> a b
c <
第一个更好,因为文件名被正确地发布到列表的各个元素中,并且解析 的输出ls
通常充满了意想不到的复杂性