출력은 다음과 같을 것으로 예상됩니다.
$ ./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
.