Bash

在換行符上拆分字元串並使用讀取將其寫入數組

  • January 11, 2021

給定 string foo,我想將其分隔的每個欄位儲存\n到 array 的元素中bar。而且我想使用read命令或與舊版本 bash 兼容的任何其他命令(不兼容readarray)來執行此操作。

我試過這個命令:

IFS=$'\n' read -d '' -r -a bar <<< "$foo"

但它只返回錯誤程式碼 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")'

使用非空分隔符會產生非零結果:

$ 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")'

八進制 34 是 ASCII“文件分隔符”字元,不太可能出現在您的數據中。

引用自:https://unix.stackexchange.com/questions/628527