현재 줄에 다음 정규식이 있는 경우 현재 줄과 이전 줄을 인쇄한다는 조건으로 파일을 읽으려고 합니다. 하지만 전혀 출력이 나오지 않습니다.
$ 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
...
BTW, line1="${prev}"
and 사용은 line2="${line}"
중복됩니다(원래 변수에 영향을 주지 않고 값을 조작하려는 경우 제외). 따라서 간단히 다음을 사용할 수 있습니다.
...
while read line
do
#if [ -n "${prev}" ] &&
if [[ $line =~ $regex ]];then
echo "${prev}"
echo "${line}"
fi
prev="$line"
done < as159.tmp
...