dpkg --list |grep linux-image |grep "ii " | while read line do arr=(${line}) let i=i+1 _constr+="${arr[2]} " done echo $i echo ${_constr}
问题是管道,而不是循环.尝试这样
let i=0 declare -a arr while read -r line ; do arr=(${line}) let i=i+1 _constr+="${arr[2]} " done < <(dpkg --list |grep linux-image |grep "ii ") echo $i echo ${_constr}
为了清楚起见,您还应该预先声明全局变量,如上所示.
如Blagovest在评论中指出的那样,管子在一个子壳中执行.使用process substitution instead(这是<(命令)语法)将所有内容保持在相同的过程中,因此可以对全局变量进行更改. 顺便说一句,你的管道也可以改进
dpkg --list |grep '^ii.*linux-image'
一个少调用grep担心.