Ich wollte nur fragen, ob es einen Befehl gibt, der für gängige Muscheln (Bash, Dash, Kornshell) funktioniert. Es soll prüfen, ob die line
Variable einen Teil des Pfades enthält.
if [[ $line =~ "$PWD"$ ]] ;then
shell
regular-expression
string
applenisch
quelle
quelle
Antworten:
Ja, neuere Versionen von bash können dies:
Die gleiche Syntax funktioniert in zsh und ksh, jedoch nicht in Bindestrich. Soweit ich weiß, hat dash keine solchen Fähigkeiten.
Beachten Sie, dass Ihre Regex , ob die Variable prüft
$line
Enden mit$PWD
. Entfernen Sie$PWD
Folgendes$line
, um zu überprüfen, ob irgendwo Übereinstimmungen vorhanden sind$
:quelle
/home/terdon/foo
mitzsh
,ksh
undbash
(4.3.25) , und es hat gut funktioniert mit allen von ihnen. Es bricht tatsächlich ab, wenn esPWD
Regex-Operatoren enthält. Das war mir einfach nie in den Sinn gekommen, danke!In jeder POSIX-kompatiblen Shell können Sie Folgendes tun:
Dies funktioniert in
bash
,dash
und fast jeder anderen Shell, die Sie benennen können.Es kann auch verwendet werden, um mehrere Möglichkeiten einfach zu handhaben. Zum Beispiel:
Sie können auch alternieren:
Beachten Sie die Verwendung des obigen Zitats:
case $line ...
case
Anweisung wird weder aufgeteilt$IFS
noch als Muster für den Dateinamen gen verwendet. Dies ähnelt der Art und Weise, wie das linke Argument in einem[[
Test behandelt wird.(*"$PWD"*)
$IFS
Dateinamen- noch einer Dateinamengenerierung unterzogen - eine nicht zitierte Erweiterung wird weder geteilt noch global.$PWD
ein*
und enthalten ist und nicht in Anführungszeichen steht, wird es als Musterobjekt und nicht als*
zu durchsuchendes Literal ausgelegt .quelle
:
Kommentar war verwirrend, aber ich habe es , weil es nicht gen einen Syntaxfehler hat oder versehentlich etwas proggie läuft namens was auch immer in$PATH
. Auf diese Weise entsteht immer noch ein Syntaxfehler, aber zumindest ist klar, dass dies der Fall sein sollte.(
case $line in *"$PWD"*)
zsh
würgst du daran.$(case a in a);; esac)
?zsh -cx '(case $1 in $2*) echo ok;;esac)' -- one o
funktioniert, aber das Präfix a: $
bricht es. Ich denke, das ist das Problem, auf das ich in der Vergangenheit gestoßen bin - es war immer ein wenig unklar, und ich habe es nie zu genau betrachtet, weil das Hinzufügen ganz links es(
immer behoben hat. Schließlich schrieb ich es einfach als eine seltsamezsh
Sache ab und machte es zur Regel, beide Enden zu verwenden.