Como verificar uma string em uma linha usando a instrução if?

0

Estou esperando a saída como abaixo

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

Estou usando o script como abaixo

#!/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"

Mas o que não está retornando a saída esperada.

O que dá saída como

test/directory1/dir2/Main
test/directory1/dir2/Main dont have Main
dir2/dir3
dir2/dir3 dont have Main
    
por user2417975 16.01.2017 / 11:03

1 resposta

4

A expressão regular ^(Main)$ será comparada com a string completa em $project . Isso parece ser um caminho. O problema é que, a menos que $project seja exatamente Main , a comparação falhará. Isso ocorre porque a expressão está ancorada no início e no final da string.

Acredito que simplesmente alterar a expressão para Main$ resolverá isso para você. Isso corresponderá a Main no final da string em $project .

    
por 16.01.2017 / 11:16