我正在尝试使用除空格之外的分隔符将字符串拆分为数组,从而保留空格。
例如,如果我跑:
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
如何保留空格?
答案 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
时,单词拆分使用任何形式的空格,因此空格和换行符是字段分隔符。