![if 문을 사용하여 한 줄의 문자열을 확인하는 방법은 무엇입니까?](https://linux55.com/image/103264/if%20%EB%AC%B8%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%9C%20%EC%A4%84%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%ED%99%95%EC%9D%B8%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
출력은 다음과 같을 것으로 예상됩니다.
$ ./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
.