Dopasowanie Regex w skrypcie powłoki

0

Oto fragment mojego skryptu powłoki -

regex="<version>([0-9]*)\.([0-9]*)\.([0-9]*)([^<]*)<\/version>.*"

#some unrelated lines of code

    echo $(grep -m 1 "<version>" $1)
    if [[ $(grep -m 1 "<version>" $1) =~ $regex ]]
    then
        main_version = "${BASH_REMATCH[1]}"
        feature_version = "${BASH_REMATCH[2]}"
        patch_version = "${BASH_REMATCH[3]}"
        tag = "${BASH_REMATCH[4]}"
    else
        echo "$1: Version not Found" >&2
    fi

Ale pokazuje mi następujące wyjście -

<version>1.1.7-release</version> <!-- ABC version -->
abc/xyz/pom.xml: Version not Found

Ale zgodnie z moim rozumieniem regex powinien pasować do wyjścia grep (powtórzyłem to do terminala, aby uzyskać lepszą przejrzystość). Czy ktoś może powiedzieć, co robię źle?

monster
źródło
Próbowałem tego w pliku zawierającym twoje rzeczy i pasuje ... co to jest twoje wydanie bash? (bash --wersja)
tonioc
I co dokładnie jest wyjście z grep? echo $(grep ...) zmienią wynik na wiele sposobów (w rzeczywistości, echo $(somecommand) prawie zawsze jest zły pomysł). Próbować grep ... | LC_ALL=C cat -vet - cat Polecenie przekształci wiele normalnie niewidocznych znaków w widoczne formy i doda „$” na końcu każdej linii, aby zobaczyć, gdzie się znajdują.
Gordon Davisson
Znalazłem błąd, spowodowany przez export -f custom_function użyć funkcji custom_function w xargs i oczywiście powyższy fragment był częścią funkcji niestandardowej. dzięki za poświęcenie czasu
monster