0
如何用多行命令輸出填充bash數組?如何使用多行命令輸出填充bash數組?
例如給這個printf命令:
$ printf 'a\nb\n\nc\n\nd\ne\nf\n\n'
a
b
c
d
e
f
我想有一個bash數組填充,如果我寫道:
$ arr[0]='a
b'
$ arr[1]='c'
$ arr[2]='d
e
f'
等可以遍歷它:
$ for i in "${arr[@]}"; do printf "<%s>\n" "$i"; done
<a
b>
<c>
<d
e
f>
我嘗試過使用NUL字符來分隔我想要的數組字段的各種化身,而不是一個空行作爲這似乎是我最好的選擇,但到目前爲止沒有運氣,例如:
$ IFS=$'\0' declare -a arr="($(printf 'a\nb\n\0c\n\0d\ne\nf\n\0'))"
$ for i in "${arr[@]}"; do printf "<%s>\n" "$i"; done
<a>
<b>
<c>
<d>
<e>
<f>
我也試過mapfile -d $'\0'
,但我的映射文件不支持-d
。
我也發現這個工程:
$ declare -a arr="($(printf '"a\nb" "c" "d\ne\nf"'))"
$ for i in "${arr[@]}"; do printf "<%s>\n" "$i"; done
<a
b>
<c>
<d
e
f>
,但似乎有點麻煩,我不得不逃離"
■當我真正希望它告訴shell使用之外的其他一些字符作爲數組字段分隔符空白。
僅供參考''mapfile' in'bash' 4.4支持'-d'並於今天發佈。 – chepner