我觉得我的状态有问题

我觉得我的状态有问题

我正在尝试读取一个文件,条件是如果我的当前行具有以下正则表达式,则打印当前行和上一行。但是我根本没有得到任何输出。

$ cat xc
#!/bin/bash
prev=
regex="switchport trunk allowed vlan*"
while read line
do
    if [ -n "${prev}" ] && [[ $line =~ $regex ]];then
        line1="${prev}"
        line2="${line}"
        echo "${line1}"
        echo "${line2}"
    fi
done < as159.tmp

$ ./xc

当测试没有 $prev 部分的条件时(我将其注释掉,如下所示),我可以看到我确实得到了输出:

$ cat xc
#!/bin/bash
prev=
regex="switchport trunk allowed vlan*"
while read line
do
    #if [ -n  "${prev}" ] && 
    if [[ $line =~ $regex ]];then
        line1="${prev}"
        line2="${line}"
        echo "${line1}"
        echo "${line2}"
    fi
done < as159.tmp


$ ./xc

switchport trunk allowed vlan 40,10,30

switchport trunk allowed vlan 10,20,30,50,100

所以这肯定是一个条件问题,我不确定它是什么。

答案1

主要问题是关于你的变量,prev因为这个变量从来没有值。所以解决方案是给它分配一个像这样的值:

...
while read line
do
    #if [ -n  "${prev}" ] && 
    if [[ $line =~ $regex ]];then
        line1="${prev}"
        line2="${line}"
        echo "${line1}"
        echo "${line2}"
    fi
prev="$line"
done < as159.tmp
...

顺便说一句,使用line1="${prev}"andline2="${line}"是多余的(除非您想在不影响原始变量的情况下操作这些值)。因此,您可以简单地使用:

...
while read line
do
    #if [ -n  "${prev}" ] && 
    if [[ $line =~ $regex ]];then
        echo "${prev}"
        echo "${line}"
    fi
prev="$line"
done < as159.tmp
...

相关内容