Bash – 将变量的值传播到循环外部

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}

循环外的echo语句不显示预期变量.
如何使变量的内容在循环之外传播?

问题是管道,而不是循环.尝试这样
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担心.

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...