我想把一些返回可能包含空格的元素行的输出带到一个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>
这不太可能是你想要的。
如何将线条分配给数组元素而不管包含空格的行?
答案 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