给定 string foo
,我想将它的每个字段存储\n
到 array 的元素中bar
。我想使用read
命令或与旧版本的 bash 兼容的任何其他命令(但readarray
不是)来执行此操作。
我尝试了这个命令:
IFS=$'\n' read -d '' -r -a bar <<< "$foo"
Run Code Online (Sandbox Code Playgroud)
但它只返回错误代码 1。
有什么命令可以用来完成我想要的事情吗?我知道我可以迭代地执行此操作,但显然仅使用一个命令执行此操作是首选。
read
返回 1,因为在字符串中看不到分隔符。但是,该数组已填充:
$ echo "$BASH_VERSION"
3.2.57(1)-release
$ foo=$'one\ntwo\nthree\nfour'
$ IFS=$'\n' read -d '' -r -a bar <<<"$foo"
$ echo $?
1
$ declare -p bar
declare -a bar='([0]="one" [1]="two" [2]="three" [3]="four")'
Run Code Online (Sandbox Code Playgroud)
使用非空分隔符会产生非零结果:
$ unset bar
$ IFS=$'\n' read -d "\034" -r -a bar <<<"${foo}\034"
$ echo $?
0
$ declare -p bar
declare -a bar='([0]="one" [1]="two" [2]="three" [3]="four")'
Run Code Online (Sandbox Code Playgroud)
八进制 34 是 ASCII“文件分隔符”字符,不太可能出现在您的数据中。