如何将包含空格的输出行分配给bash数组

时间:2015-12-09 01:53:51

标签: arrays bash

我想把一些返回可能包含空格的元素行的输出带到一个bash数组中,每一行都有自己的数组元素。

例如:

find . -name \*.jpg

...可能会返回文件名列表。我希望将每个文件名分配给一个数组。简单的解决方案通常不起作用,因为如果文件名中有空格,那么单词将获得自己的数组元素。

例如,从目录中的此文件列表开始:

FILE1.jpg
FILE2.jpg
FILE WITH SPACES.jpg

尝试:

FILES=( $(find . -name \*.jpg) )

你得到(<>添加以强调个别元素):

$ for f in "${FILES[@]}"; do echo "<$f>"; done
<./FILE>
<WITH>
<SPACES.jpg>
<./FILE1.jpg>
<./FILE2.jpg>

这不太可能是你想要的。

如何将线条分配给数组元素而不管包含空格的行?

1 个答案:

答案 0 :(得分:1)

在进行作业之前设置IFS。这允许bash通过仅使用&#34; \ n&#34;来忽略空格。作为分隔符:

IFS=$'\n'
FILES=( $(find . -name \*.jpg) )

现在你得到了结果:

for f in "${FILES[@]}"; do echo "<$f>"; done
<./FILE WITH SPACES.jpg>
<./FILE1.jpg>
<./FILE2.jpg>

请注意,访问阵列的方式也很重要。这包含在类似的问题中:BASH array with spaces in elements