【发布时间】:2015-09-19 08:27:10
【问题描述】:
我早些时候在 bash 中处理字符串拆分问题。经过一番搜索,我发现了两种方法来拆分字符串并制作拆分部分的数组。
但是当我打印它们时,我得到了不同的结果。
a="hello,hi,hola"
方法一:
IFS=',' read -ra arr <<< "$a"
echo "${arr[@]}"
输出:
hello hi hola
方法二:
arr=$(echo $a | tr "," "\n")
echo "${arr[@]}"
输出:
hello
hi
hola
这背后的原因是什么?
【问题讨论】:
-
在您的方法 2 中,
arr不是数组。您需要:arr=( $(echo $a | tr "," "\n") )使其成为一个数组。然后,如果您有连续的空格字符或全局字符,您将遇到问题。使用方法 1,甚至更好,IFS=, read -r -d '' -a arr < <(printf '%s,\0' "$a"),这是在 Bash 中拆分字符串的规范方法。见stackoverflow.com/questions/918886。 -
您可以将其写为格式良好的答案,以便其他用户可以得到帮助。 :)
标签: bash string-split