Bash 每个带引号的字符串作为数组中自己的元素

Bash 每个带引号的字符串作为数组中自己的元素,bash,shell,ls,Bash,Shell,Ls,我试图将result=$(ls-Q)返回到数组的每一项都放入数组中 如果我回显结果,它看起来是这样的:“folder2”“文件夹空间”“test123”。请注意,某些项包含空格 如何将每个项目放在数组中的引号周围(引号必须保留在那里)。我期望的输出是: echo ${ARRAY[0]} --> "folder2" echo ${ARRAY[1]} --> "folder space" echo ${ARRAY[2]} --> "test 123" 如何实现这一点?不要解

我试图将
result=$(ls-Q)
返回到数组的每一项都放入数组中

如果我回显
结果
,它看起来是这样的:
“folder2”“文件夹空间”“test123”
。请注意,某些项包含空格

如何将每个项目放在数组中的引号周围(引号必须保留在那里)。我期望的输出是:

echo ${ARRAY[0]}  --> "folder2"
echo ${ARRAY[1]}  --> "folder space"
echo ${ARRAY[2]}  --> "test 123"

如何实现这一点?

不要解析ls的输出。即使使用-Q,它也已经坏了。在我的有毒文件名目录中,我得到:

res=(*)
for f in "${res[@]}"; do echo "file: $f"; done 

file: 1 file.tar.gz
file: 2 file.tar.gz
file: 3 file.tar.gz
file: 4 file.tar.gz
file: 5 file.tar.gz
file: abc3<foo.mp3
file: bb bb
file: dd dd
file: ff ff
file: file-mit"Quote"
file: m d.sh
file: regex=*a*
file: zeilen
umbruch.zip
res=(*)
对于“${res[@]}”中的f;做回显“文件:$f”;完成
文件:1 file.tar.gz
文件:2 file.tar.gz
文件:3 file.tar.gz
文件:4 file.tar.gz
文件:5 file.tar.gz
文件:abc3如下使用:

ARRAY=(*)
例如:

mkdir test
cd test
# Create file with space in name
touch 'foo bar'
# Create file with newline in name
touch 'hello
world'

files=(*)

for file in "${files[@]}" ; do
    echo "name: ${file}"
done
输出:

name: foo bar                                                                                                                         
name: hello                                                                                                                           
world

mapfile-t ARRAY<如果文件名包含空格,为什么会换行?更新本身并没有错,但这不是你应该做的事情。您将从
res=*得到相同的结果;对于f,以美元为单位;执行
;该阵列没有被用于任何实际用途
${…[@]}
应该始终被引用,或者它与
${…[*]}
没有区别。相反,让glob在数组赋值中展开(
res=(*)
),然后用“${res[@]}”中的f的
对正确引用的结果进行迭代;执行
name: foo bar                                                                                                                         
name: hello                                                                                                                           
world