Bestimmte Zeichen beim Vergleichen von Variablen ignorieren?

Bestimmte Zeichen beim Vergleichen von Variablen ignorieren?

Wenn dies beispielsweise mein Skript ist:

if [[ $yesno == "What's going on" ]]; then

Wie kann ich dann beispielsweise ', ?, ,und ignorieren ?.

Im Grunde genommen scheinen also Whats going on, What's going on, What's going on?und What's going on.alle dasselbe zu sein. Ich weiß, dass ich || [[ $yesno == ".. ]]mehrere Variablen eingeben kann, aber ich kann nicht jede einzelne Kombination eingeben.

Antwort1

Wenn Sie nur möchten, dass Ihre spezifischen Beispiele funktionieren, können Sie eine Bash-Regexp-Übereinstimmung verwenden

[[ $yesno =~ What\'?s\ going\ on[.?]? ]]

wobei wir das Anführungszeichen und die Leerzeichen mit einem Backslash maskieren.

Antwort2

Sie können vor dem Vergleich einfach alle Zeichen außer alphanumerischen in Ihrer Variable entfernen:

$ yesno="What's going on?"
$ if [[ ${yesno//[^a-zA-Z0-9\ ]/} == "Whats going on" ]]; then echo "OK";fi
OK

Antwort3

Eine der gebräuchlichsten und universellsten Möglichkeiten hierfür wäre, den String in zu leiten grepund grepden Rückgabecode zu überprüfen. Die ifAnweisung kann den Exitcode jedes Befehls oder jeder Pipeline überprüfen:

if echo "$yesno" | grep -q "What'*s *going *on[?.]*"; then

Dies erlaubt neben den von dir genannten Zeichen auch 0 oder mehr Leerzeichen zwischen Wörtern.

Diese Konstruktion sollte unter OS X, FreeBSD, GNU/Linux und allen anderen Systemen funktionieren, die POSIX grep bereitstellen:

verwandte Informationen