Ich möchte sehen, ob sich eine Zeichenfolge in einem Teil einer anderen Zeichenfolge befindet.
z.B:
'ab' in 'abc' -> true
'ab' in 'bcd' -> false
Wie kann ich dies unter der Bedingung eines Bash-Skripts tun?
command-line
bash
scripts
Lucio
quelle
quelle
echo
Aussagen ändern sollten . Weil ich bekommeab is not in abc
ab was found in abc
, aber wenn ich benutze,substring=z
bekomme ichz was found in abc
ab is not in abc
. Aberz was found in abc
. Das ist lustig: D[[ "bcd" =~ "ab" ]]
[[ "abc" =~ "ab" ]]
Die Klammern sind für den Test, und da es sich um doppelte Klammern handelt, kann es so einige zusätzliche Tests geben
=~
.Sie könnten dieses Formular also so ähnlich verwenden
Edit: korrigiert "= ~", hatte gekippt.
quelle
fail
mit diesen Parametern:var2="abcd"
[[ $string =~ $substring ]]
. Ich habe die Antwort aktualisiert.Verwenden von Bash- Dateinamenmustern (auch "Glob" -Muster genannt)
quelle
Die folgenden zwei Ansätze funktionieren in jeder POSIX-kompatiblen Umgebung, nicht nur in bash:
Beide der obigen Ausgaben:
Ersteres hat den Vorteil, dass kein separater
grep
Prozess gestartet wird.Beachten Sie, dass ich
printf %s\\n "${foo}"
anstelle von verwenden,echo "${foo}"
weilecho
mangeln könnte,${foo}
wenn es Backslashes enthält.quelle
xrandr
in der Variablen gespeicherten Monitornamen zu finden. +1 und Willkommen bei 1K rep Club :)Shell-Case-Anweisung
Dies ist die portabelste Lösung, die auch auf alten Bourne-Shells und Korn-Shells funktioniert
Probelauf:
Beachten Sie, dass Sie müssen nicht speziell verwenden
echo
Sie verwenden können ,exit 1
undexit 0
Erfolg oder Misserfolg zu bedeuten.Wir könnten auch eine Funktion erstellen (die bei Bedarf in großen Skripten verwendet werden kann) mit bestimmten Rückgabewerten (0 bei Übereinstimmung, 1 bei keiner Übereinstimmung):
grep
Dieser spezielle Ansatz ist bei if-else-Anweisungen in nützlich
bash
. Meistens auch tragbarAWK
Python
Rubin
quelle
Beachten Sie die
[[
und"
:Also, wie @glenn_jackman sagte, aber bedenken Sie, dass, wenn Sie den gesamten zweiten Term in doppelte Anführungszeichen setzen, der Test auf wörtliche Übereinstimmung umgestellt wird .
Quelle: http://tldp.org/LDP/abs/html/comparison-ops.html
quelle
Ähnlich wie Edwins Antwort, jedoch mit verbesserter Portabilität für posix & ksh und einem Hauch weniger laut als bei Richard:
Ausgabe:
quelle