Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这两种拆分方法在bash中有何区别?_Bash_String Split - Fatal编程技术网

这两种拆分方法在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=',

我之前在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=',' 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
检查它。