Bash
在換行符上拆分字元串並使用讀取將其寫入數組
給定 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“文件分隔符”字元,不太可能出現在您的數據中。