在 shell 脚本循环中更改变量

用户1272965

我正在运行一个将警告写入标准输出的命令,并且我希望我的脚本停止这些警告,因此将我在这里学到的很多东西拼凑起来,我有以下内容......

  warnd=false;
  myLongCommand |
    while IFS= read -r line
    do
      if [[ $line == *"WARNING in ."* ]]; then
          warnd=true;
          echo "found a warning!!!!!"
          break
      fi
      echo $line
    done
    echo WARNING IS $warnd
  if [[ "$warnd" == true ]]; then
      echo "exiting due to warning"
      exit
  else
      echo "no warnings"
  fi

但这并不像我期望的那样工作。当 myLongCommand 写入警告时,我看到以下回显...

发现警告!!!!

警告是假的

没有警告

为什么warnd在循环后没有看到对我的变量的更改我已经阅读了有关 shell 脚本变量范围的文章,但似乎没有任何内容表明循环内的变量具有不同的范围。

伊尼安

您正在管道中运行命令并修改变量,该变量在管道创建的子外壳终止后不会生效。使用适当的过程替换技术和 while 循环,

while IFS= read -r line
do
  if [[ $line == *"WARNING in ."* ]]; then
      warnd=true;
      echo "found a warning!!!!!"
      break
  fi
done< <(myLongCommand)

值得阅读此BashFAQ - 024 - 我在管道中的循环中设置变量。为什么它们在循环终止后消失?或者,为什么我不能通过管道读取数据?

从链接页面引用的一个简单示例,

linecount=0

printf '%s\n' foo bar |
while IFS= read -r line
do
    linecount=$((linecount + 1))
done

echo "total number of lines: $linecount"

所以理想情况下, 的预期值lineCount将是,2但由于变量在管道创建的子外壳中更新,一旦子外壳退出,更新就不会反映。

仅供参考,上面的小片段产生的输出为

total number of lines: 0

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在for循环中Shell变量

来自分类Dev

for循环中的变量在shell脚本中无法提供正确的输出

来自分类Dev

Shell脚本变量和循环

来自分类Dev

在shell脚本中尝试在循环中运行awk时出现“语法错误:循环变量无效”

来自分类Dev

在shell脚本的for循环中需要帮助

来自分类Dev

“ || exit”在循环中做什么?(Shell脚本)

来自分类Dev

如何在shell脚本中的for循环中传递变量值

来自分类Dev

如何在Shell脚本中的for循环中保留变量的值

来自分类Dev

有关在Shell脚本中的for循环中使用变量和文件的几个问题

来自分类Dev

在shell脚本的while循环内分配变量

来自分类Dev

在shell脚本上使用变量循环for

来自分类Dev

for循环中的shell变量值与after循环不同

来自分类Dev

Shell脚本更改带有变量的目录

来自分类Dev

在shell脚本中更改shell

来自分类Dev

Unix bash shell脚本-在“ for”循环中迭代数组

来自分类Dev

在Shell脚本的for循环中逐行遍历文本文件

来自分类Dev

在循环中获取函数的返回值 - shell 脚本

来自分类Dev

Shell脚本-分批循环

来自分类Dev

Shell脚本执行循环

来自分类Dev

while循环shell脚本

来自分类Dev

Shell脚本执行循环

来自分类Dev

在awk中使用循环变量循环ZSH Shell脚本

来自分类Dev

Shell变量的For循环

来自分类Dev

使用perl循环中的变量在perl循环中运行shell命令

来自分类Dev

Shell - for 循环中的递增数

来自分类Dev

在While循环中更改变量值

来自分类Dev

在for-next的每个循环中更改变量?

来自分类Dev

在while循环中更改变量的整数部分jQuery

来自分类Dev

Javascript在foreach循环中更改变量名称