小编典典

元素中带有空格的 Bash 数组

all

我正在尝试在我的相机文件名的 bash 中构造一个数组:

FILES=(2011-09-04 21.43.02.jpg
2011-09-05 10.23.14.jpg
2011-09-09 12.31.16.jpg
2011-09-11 08.43.12.jpg)

如您所见,每个文件名中间都有一个空格。

我尝试将每个名称用引号括起来,并用反斜杠转义空格,但这两种方法都不起作用。

当我尝试访问数组元素时,它继续将空格视为元素分隔符。

如何正确捕获名称中带有空格的文件名?


阅读 70

收藏
2022-08-24

共1个答案

小编典典

我认为问题可能部分与您访问元素的方式有关。如果我做一个简单的for elem in $FILES,我会遇到和你一样的问题。但是,如果我通过它的索引访问数组,就像这样,如果我以数字方式或使用转义添加元素,它就会起作用:

for ((i = 0; i < ${#FILES[@]}; i++))
do
    echo "${FILES[$i]}"
done

这些声明中的任何一个都$FILES应该起作用:

FILES=(2011-09-04\ 21.43.02.jpg
2011-09-05\ 10.23.14.jpg
2011-09-09\ 12.31.16.jpg
2011-09-11\ 08.43.12.jpg)

或者

FILES=("2011-09-04 21.43.02.jpg"
"2011-09-05 10.23.14.jpg"
"2011-09-09 12.31.16.jpg"
"2011-09-11 08.43.12.jpg")

或者

FILES[0]="2011-09-04 21.43.02.jpg"
FILES[1]="2011-09-05 10.23.14.jpg"
FILES[2]="2011-09-09 12.31.16.jpg"
FILES[3]="2011-09-11 08.43.12.jpg"
2022-08-24