我有一个非常棘手的问题,我已经想解决很长时间了。
如果$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