Bash - 将字符串拆分为数组,保留空格

时间:2018-01-04 23:00:50

标签: linux bash

我正在尝试使用除空格之外的分隔符将字符串拆分为数组,从而保留空格。

例如,如果我跑:

files=$(echo "foo.txt:bar.txt:my story.txt" | tr ":" "\n")
for f in $files; do
    echo $f
done

我明白了:

foo.txt
bar.txt
my
story.txt

如何保留空格?

2 个答案:

答案 0 :(得分:5)

files=$(cmd)不是数组赋值。这是一个字符串赋值(cmd的输出分配给常规变量files)。

我建议使用read -a拆分字符串,因为globs不会成为问题:

IFS=: read -ra files <<< "foo.txt:bar.txt:my story.txt"

for f in "${files[@]}"; do
    echo "$f"
done

答案 1 :(得分:0)

使用IFS指定字段分隔符:

IFS=: files=($(echo "foo.txt:bar.txt:my story.txt"))
for f in "${files[@]}"; do
    echo "$f"
done

您还需要在值周围加上括号来创建数组。您只需将$files设置为:替换为换行符的字符串即可。然后展开$files时,单词拆分使用任何形式的空格,因此空格和换行符是字段分隔符。