if文を使用して1行の文字列を確認するには?

if文を使用して1行の文字列を確認するには?

出力は次のようになると予想されます。

$ ./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

関連情報