C
computerfrust
Gast
Bash: Pattern Matching nur im Skript, aber nicht auf Dateien anwenden?
Ich versuche mich momentan an Shell Scripting. Derzeit prüfe ich, ob ein Substring in einem String enthalten ist:
Der Substring beinhaltet teilweise "*"-Zeichen, damit per Pattern Matching folgende Abfrage funktioniert:
Zum Beispiel string = "Blah blubb" und substring = "Blah*" oder "*blu*".
Das funktioniert so auch, allerdings wird es hakelig, wenn im working directory irgendwelche Dateien enthalten sind, die dann gefunden werden.
Wenn zum Beispiel die Datei "bluray50" vorhanden ist, dann wird sie erkannt, als $substring eingefügt und somit erhält das if die Aussage "True" ("*blu*" wird zu "bluray50" expandiert). Obwohl mich das Dateisystem innerhalb des Skripts überaupt nicht interessiert.
Ich frage mich jetzt, ob man das umgehen kann.
Edit: Moment mal, ich sehe gerade dass die Doppelklammer [[ eigentlich Filename Expansion verhindern sollte und nur internes Pattern Matching betreiben sollte. Warum funktioniert das nicht? Muss ich da irgendeine Bash-Variable umstellen?
Ich versuche mich momentan an Shell Scripting. Derzeit prüfe ich, ob ein Substring in einem String enthalten ist:
Der Substring beinhaltet teilweise "*"-Zeichen, damit per Pattern Matching folgende Abfrage funktioniert:
Code:
if [[ "$string" == $substring ]]
Zum Beispiel string = "Blah blubb" und substring = "Blah*" oder "*blu*".
Das funktioniert so auch, allerdings wird es hakelig, wenn im working directory irgendwelche Dateien enthalten sind, die dann gefunden werden.
Wenn zum Beispiel die Datei "bluray50" vorhanden ist, dann wird sie erkannt, als $substring eingefügt und somit erhält das if die Aussage "True" ("*blu*" wird zu "bluray50" expandiert). Obwohl mich das Dateisystem innerhalb des Skripts überaupt nicht interessiert.
Ich frage mich jetzt, ob man das umgehen kann.
Edit: Moment mal, ich sehe gerade dass die Doppelklammer [[ eigentlich Filename Expansion verhindern sollte und nur internes Pattern Matching betreiben sollte. Warum funktioniert das nicht? Muss ich da irgendeine Bash-Variable umstellen?
Zuletzt bearbeitet: