从第二个文件bash进行条件读取

从第二个文件bash进行条件读取,bash,Bash,当while循环已经从stdin读取数据时,我正在努力从循环中传递stdout/stdin 我曾尝试对主循环使用不同的文件描述符,但在第二组变量(空白或奇数数据)的回音中得到了非常奇怪的结果 例如: grep something/tmp/来自某个文件>/tmp/abc123 当IFS=“,”读取-u 3 var1 var2 var3时 做 如果[$var1=“abc”];然后 flag=true fi grep var1/tmp/second|u文件|读取sec1 sec2 sec3 echo“

当while循环已经从stdin读取数据时,我正在努力从循环中传递stdout/stdin

我曾尝试对主循环使用不同的文件描述符,但在第二组变量(空白或奇数数据)的回音中得到了非常奇怪的结果

例如:

grep something/tmp/来自某个文件>/tmp/abc123
当IFS=“,”读取-u 3 var1 var2 var3时
做
如果[$var1=“abc”];然后
flag=true
fi
grep var1/tmp/second|u文件|读取sec1 sec2 sec3
echo“$var1/$var2/$var3$sec1:$sec2:$sec3”
完成3
出于这里的目的,我缩短了正在运行的所有if检查,并简化了名称/文件等。但这是基本检查。。sec1、sec2、sec3中的值要么是空白值,要么是奇怪值


最初我没有您的问题是第二个
读取
在子shell中运行,所有命令都在管道中运行,例如
a=0;a=1 | a=2 | a=3;echo$a
将打印
0

grep…|read sec1 sec2 sec3确实设置了这些变量,但只有在单独的过程中,
read
命令才能运行

bash
/
ksh
/
zsh
中最简单的方法是使用:


阅读sec1 sec2 sec3grep something /tmp/from_some_file > /tmp/abc123
while IFS="," read -u 3  var1 var2 var3
do
  if [ $var1 = "abc" ] ; then
     flag=true
  fi
  grep var1 /tmp/second_file | read sec1 sec2 sec3
  echo "$var1/$var2/$var3  $sec1 : $sec2 : $sec3"
done  3< /tmp/abc123
read sec1 sec2 sec3 < <(grep var1 /tmp/second_file)