我如何知道 bash for 循环中正在使用哪个文件?

我如何知道 bash for 循环中正在使用哪个文件?

我有一个非常棘手的问题,我已经想解决很长时间了。

如果$line来自$(cat foo),则执行动作1

如果$line来自$(cat bar),则执行动作2

for line in $(cat foo) $(cat bar) ; do   
    if [ ??? ]
        then action1
        else action2
    fi
done

我需要在 if 语句中输入什么?

答案1

那这个呢?

for line in $(grep '^.*$' foo /dev/null) $(grep '^.*$' bar /dev/null)
do   
    if [[ ${line} =~ ^foo.*$ ]]
    then
        action1
    else
        action2
   fi
done

如果您想要删除$line随后的前导文件名,您可以在 if / else 主体中添加line=$(<<<$line sed 's/^foo:\(.*\)$/\1/')和。line=$(<<<$line sed 's/^bar:\(.*\)$/\1/')

答案2

自行解决

只要 $line 永远不会等于“FILECHANGE”(在我的情况下很可能永远不会)这就会起作用

x=1
for line in $(cat foo) FILECHANGE $(cat bar) ; do
  if [ $line = FILECHANGE ]
  then x=$(($x+1))
  elif [ $x = 1 ]
  then echo 1
  elif [ $x = 2 ]
  then echo 2
  fi
done

相关内容