加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:26:11 所属栏目:安全 来源:网络整理
导读:dpkg --list |grep linux-image |grep "ii " | while read linedo arr=(${line}) let i=i+1 _constr+="${arr[2]} "doneecho $iecho ${_constr} 循环外的echo语句不显示预期变量. 如何使变量的内容在循环之外传播? 问题是管道,而不是循环.尝试这样 let i=0de
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担心.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读