Da die POSIX /BusyBox Frage geschlossen wird, ohne die richtige Antwort zu geben (IMHO), werde ich hier eine Antwort posten.
Die kürzest mögliche Antwort ist:
[ ${_string_##*$_substring_*} ] || echo Substring found!
o
[ "${_string_##*$_substring_*}" ] || echo 'Substring found!'
Beachten Sie, dass die Doppelhash es obligatorisch mit einigen Muscheln ( ash
). Oben wird bewertet [ stringvalue ]
wenn die Teilzeichenkette nicht gefunden wird. Es wird kein Fehler zurückgegeben. Wenn die Teilzeichenkette gefunden wird, ist das Ergebnis leer und es wird ausgewertet [ ]
. Dies führt zum Fehlercode 1, da die Zeichenkette vollständig ersetzt wird (aufgrund von *
).
Die kürzeste und gebräuchlichste Syntax:
[ -z "${_string_##*$_substring_*}" ] && echo 'Substring found!'
o
[ -n "${_string_##*$_substring_*}" ] || echo 'Substring found!'
Eine andere:
[ "${_string_##$_substring_}" != "$_string_" ] && echo 'Substring found!'
o
[ "${_string_##$_substring_}" = "$_string_" ] || echo 'Substring found!'
Beachten Sie die einzeln Gleichheitszeichen!
4 Stimmen
Hallo, wenn leere Zeichenfolgen falsch sind, warum halten Sie es für ungeschickt? Es war der einzige Weg, der für mich funktionierte, trotz der vorgeschlagenen Lösungen.
1 Stimmen
Sie können die
expr
Befehl hier9 Stimmen
Hier ist eine für Posix-Shells: stackoverflow.com/questions/2829613/
2 Stimmen
Bitte verwenden Sie $Nadel in einem $Heuhaufen Idiom in Ihrem Beispiel. Es ist viel einfacher zu lesen und zu verstehen.