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