Sie die =~
Anpassungsoperator in einem Zustand [[ ... ]]
verwenden:
#!/bin/bash
url=https://github.com/PatrickConway/repo-name.git
if [[ $url =~ ([^/]*)\.git ]] ; then
echo "${BASH_REMATCH[1]}"
fi
Jeder in Klammern schafft eine Capture-Gruppe, die entsprechende zusammenpassende Teilzeichen eingeschlossenen Teil kann in der gleichen Position in dem Array BASH_REMATCH gefunden werden.
[...]
definiert eine Zeichenklasse
[/]
eine Zeichenklasse entspricht ein einzelnes Zeichen besteht, einen Schrägstrich
^
eine Zeichenklasse negiert, Streichhölzer [^/]
alles andere als ein slash
*
bedeutet „Null oder mehrmalig "
\.
entspricht einem Punkt, da .
ohne Backslash mit einem beliebigen Zeichen übereinstimmt
Also, es liest: erinnere mich an einen Teilstring von Nicht-Schrägstrichen, gefolgt von einem Punkt und "Git".
Oder vielleicht eine einfache Parameter Expansion:
#!/bin/bash
url=https://github.com/PatrickConway/repo-name.git
url_without_extension=${url%.git}
name=${url_without_extension##*/}
echo $name
%
entfernt von rechts, #
von links entfernt, das Symbol Verdoppelung macht die Anpassung gierig, das heißt Platzhalter so viel wie möglich zu entsprechen versuchen.
tun es gibt Sie wollen. Haben Sie bisher irgendwelche Versuche unternommen? – 123