(*) 和 (“$(ls)”) 有什么区别?

tmp*_*bin 3 ls bash array wildcards

(*)和 和有("$(ls)")什么区别?

除了分隔符不同之外,它们基本上相同吗?

roa*_*ima 5

第一个, (*), globs 当前目录中的文件和目录列表并创建一个列表。您可以将该列表分配给一个数组变量,每个文件名将是其自己的条目。

touch 'a b' c
d=(*)
printf "> %s <\n" "${d[@]}"
> a b <
> c <
Run Code Online (Sandbox Code Playgroud)

第二个,(“$(ls)”),调用ls以列出当前目录。生成的文件和目录列表被放入一个字符串并分配给一个列表。该列表包含由换行符分隔的一组名称组成的单个元素。

d=("$(ls)")
printf "> %s <\n" "${d[@]}"
> a b
c <
Run Code Online (Sandbox Code Playgroud)

第一个更好,因为文件名正确地发布到列表的各个元素中,并且解析 的输出ls通常充满了意想不到的复杂性