我试图将rpm -Va
的输出放入一个数组中,以便我可以对结果进行多次检查。我非常希望能够让rpm命令中的每个输出行成为数组中自己的行。到目前为止,我还没有太多的运气,所以我认为最好伸手去看看其他人的想法。我尝试了以下一些选项,但无济于事。
这会添加到数组但不保留空格:
rpmarr=($(rpm -Va | sed 's_^_"_g' | sed 's_$_"_g'))
这会增加数组,但作为一个巨大的一行:
while IFS= read -r line; do rpmarr+=("$line"); done < "$(rpm -Va)"
这也增加了数组,但作为一个巨大的一行:
IFS=$'\n'; set -f; rpmarr=$(rpm -Va); set +f; unset IFS; echo ${#rpmarr[@]}
答案 0 :(得分:1)
使用Bash 4.0:
readarray -t rpmarr < <(exec rpm -Va)
否则
rpmarr=() i=0
while IFS= read -r line; do
rpmarr[i++]=$line ## Can be rpmarr+=("$line") in which case you won't need i. Only available in Bash 3.1+
done < <(exec rpm -Va)
<(exec rpm -Va)
是一种流程替换形式,exec
可以保存另一个子shell。