以防将来有人阅读本文并想知道如何将多行 awk 输出实际获取到 bash 数组中:
$ cat ./tst.sh
# ensure globbing is off and set IFS to a newline after saving original values
oSET="$-"; set -f; oIFS="$IFS"; IFS=$'\n'
array=( $(
awk 'BEGIN{
print "qh1adm 20130711151154 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ"
print "qh1adm 20130711151155 : tp import all QH1 u6 -Dsourcesystems=E7B,B17"
print "qh1adm 20130711151200 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ"
}'
) )
# restore original IFS and globbing values
IFS="$oIFS"; set +f -"$oSET"
numElts="${#array[@]}"
if (( numElts > 1 ))
then
for (( i=0; i < numElts; i++ ));
do
printf "array[%d]: %s\n" "$i" "${array[$i]}"
done
fi
$
$ ./tst.sh tmp
array[0]: qh1adm 20130711151154 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ
array[1]: qh1adm 20130711151155 : tp import all QH1 u6 -Dsourcesystems=E7B,B17
array[2]: qh1adm 20130711151200 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ
但显然,在这种情况下,这些实际上都不是必需的,整个事情可能应该在一个 awk 命令中完成。
以上内容已更新,以解决下面@CharlesDuffy 提出的问题和来自下面的输入。