Shell 在变量数组(bash)中存储ls输出

Shell 在变量数组(bash)中存储ls输出,shell,Shell,我想将ls命令的每个输出存储在变量数组中。 我已经在任意目录下尝试过:var=$(ls);echo$var 它将目录下的整个文件名存储到变量中 我还尝试了其他方法,但它将每个单词作为变量元素存储在数组中 是否有任何方法将每个文件的名称存储在数组不同索引处的目录中?是 使用地球仪 var=(*) printf '[%q]\n' "${var[@]}" %q是一种bash主义(据我所知)%s在那里可以正常工作,除了一些更奇怪的文件名 从Bash参考手册: %q Causes printf to

我想将ls命令的每个输出存储在变量数组中。 我已经在任意目录下尝试过:
var=$(ls);echo$var
它将目录下的整个文件名存储到变量中

我还尝试了其他方法,但它将每个单词作为变量元素存储在数组中

是否有任何方法将每个文件的名称存储在数组不同索引处的目录中?

使用地球仪

var=(*)
printf '[%q]\n' "${var[@]}"
%q
是一种bash主义(据我所知)<代码>%s在那里可以正常工作,除了一些更奇怪的文件名

从Bash参考手册:

%q

Causes printf to output the corresponding argument in a format that can be reused as shell input.

现在您做到了-
q
转换说明符记录在哪里?我可以找到
q
(quad)长度修饰符,但不能找到转换说明符?@DavidC.Rankin Bash ism据我所知,我可能应该提到这一点。它在手册页和bashref中。我完全同意不使用
ls
。然而,为了让OP和其他有类似问题的读者受益,值得一提的是,
var=($(ls))
将起作用。也许还需要对语法
var=(值列表)
@alvits做一点解释,但如果任何文件的名称中包含空格或shell元字符,它就不起作用,因此确实不应该这样做(尤其是当glob工作时)。谈论
var=(…)
语法可能是合理的,但我不确定这是否有用(OP知道它可以工作,等等)。