
出力は次のようになると予想されます。
$ ./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
。