这两种拆分方法在bash中有何区别?
我之前在bash中遇到了一个字符串分裂的问题。经过一些搜索,我找到了两种方法,可以拆分字符串,并将拆分的部分组成一个数组 但是当我打印它们时,我得到了不同的结果这两种拆分方法在bash中有何区别?,bash,string-split,Bash,String Split,我之前在bash中遇到了一个字符串分裂的问题。经过一些搜索,我找到了两种方法,可以拆分字符串,并将拆分的部分组成一个数组 但是当我打印它们时,我得到了不同的结果 a="hello,hi,hola" 方法1: IFS=',' read -ra arr <<< "$a" echo "${arr[@]}" hello hi hola arr=$(echo $a | tr "," "\n") echo "${arr[@]}" hello hi hola 方法2: IFS=',
a="hello,hi,hola"
方法1:
IFS=',' read -ra arr <<< "$a"
echo "${arr[@]}"
hello hi hola
arr=$(echo $a | tr "," "\n")
echo "${arr[@]}"
hello
hi
hola
方法2:
IFS=',' read -ra arr <<< "$a"
echo "${arr[@]}"
hello hi hola
arr=$(echo $a | tr "," "\n")
echo "${arr[@]}"
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")
IFS=,read-r-d'-a arr<在方法2中,arr
不是数组。您需要:arr=($(echo$a | tr“,“\n”)
使其成为一个数组。如果有连续的空格字符或全局字符,则会遇到问题。使用方法1,或者更好的方法,IFS=,read-r-d'-a arr<您可以将其编写为具有良好格式的答案,以便帮助其他用户。:)顺便问一下,在我的方法2中,arr的数据类型是什么?@AhsanulHaque在方法2中,arr
只是一个字符串。用declare-p arr
检查它。