嗨,大家好抱歉这个尴尬的标题,但我觉得这个描述有点微妙。所以这是我的问题,我想在while循环中保持count(i)从awk读取输入,然后在循环后打印i的值。但是在循环之后我变回零。下面是我的程序的简化版本,实际上我也在循环中做了一些字符串匹配,以便跳过一些行,我不会增加。
我试图删除awk并执行另一个普通的while循环,并且我的值保留在循环之后,因此我认为这不是由于某些语法错误。
任何想法都非常感谢!
#!/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;
答案 0 :(得分:2)
因为while循环位于管道中,所以它作为子进程运行,并且i的值对于该子进程是本地的。有几种方法可以保持价值;使用命名管道而不是在管道中运行,使用进程替换,或使用插值heredoc。以下是后者的一个例子:
while read var; do ... done << EOF
$( awk ... )
EOF