if 문을 사용하여 한 줄의 문자열을 확인하는 방법은 무엇입니까?

if 문을 사용하여 한 줄의 문자열을 확인하는 방법은 무엇입니까?

출력은 다음과 같을 것으로 예상됩니다.

$ ./test.sh Manifest.txt
test/directory1/dir2/Main
test/directory1/dir2/Main contains Main
test/directory1/dir2/Main have string Main
directory2/dir3
directory2/dir3 dont have string Main

다음과 같은 스크립트를 사용하고 있습니다

#!/usr/bin/ksh
while IFS='' read -r line || [[ -n "$line" ]]; do
for project in $line
do
echo $project
if [[ "$project" =~ ^(Main)$ ]]; then
        echo "$project contain Main"
        exit 1
else
        echo "$project dont have Main"
fi
done
done < "$1"

그러나 예상한 출력이 반환되지 않습니다.

출력은 다음과 같습니다

test/directory1/dir2/Main
test/directory1/dir2/Main dont have Main
dir2/dir3
dir2/dir3 dont have Main

답변1

정규식은 ^(Main)$의 전체 문자열과 일치합니다 $project. 이것이 갈 길인 것 같습니다. 문제는 $project그렇지 않은 이상정확히 Main, 비교가 실패합니다. 이는 표현식이 문자열의 시작과 끝에 고정되어 있기 때문입니다.

Main$나는 표현을 다음과 같이 바꾸는 것만으로도 문제가 해결될 것이라고 믿습니다 . 이는 Main의 문자열 끝 과 일치합니다 $project.

관련 정보