输出$(rpm -Va)到数组,空格不变

时间:2014-06-10 16:42:41

标签: arrays bash while-loop

我试图将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[@]}

1 个答案:

答案 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。