0

大家好,对于这个尴尬的标题感到抱歉,但我认为描述起来有点微妙。所以这是我的问题,我想在从 awk 读取输入的 while 循环中保留一个计数(i),然后在循环后打印 i 的值。然而,循环后 i 变回零。下面是我的程序的简化版本,实际上我还在循环内进行了一些字符串匹配,以便跳过某些行并且 i 不会增加。

我试图删除 awk 并执行另一个普通的 while 循环,并且 i 的值在循环之后保留,因此我相信这不是由于某些语法错误。

任何想法都非常感谢!

#!/bin/bash
arr=();
i=0;
awk -F '{print $1}' SOMEFILE | while read var
do
  echo $var;
  arr[i]=$var;
  i=$((i+1));
  echo $i;
done
echo $i;
4

1 回答 1

2

因为 while 循环在管道中,所以它作为子进程运行,并且 i 的值是该子进程的本地值。有几种方法可以保持价值;使用命名管道而不是在管道中运行,使用进程替换,或使用插值 heredoc。这是后者的一个例子:

while read var; do ... done << EOF
$( awk ... )
EOF
于 2012-04-16T20:06:20.233 回答