Ich schreibe eine Bash-Validierungsfunktion, die Benutzereingaben bereinigt.Wie schreibe ich eine Regex, die Alpha-Numerik und Leerzeichen validiert
Die Idee ist, dass, wenn ein Skript 3 Parameter hat, diese nur alphanumerische Werte sein können. Aber ein Parameter könnte mehrere Wörter in Anführungszeichen wie so eingeschlossen sein:
myfunction arg1 arg2 "this is arg3"
So bin ich im Grunde der Suche alles abzustreifen, dass nicht ein alphanumerisches oder Leerzeichen.
Im Moment habe ich erhielt:
validateEntry() { string=$1 clean=${string//[^a-zA-Z0-9\s]/} }
Aber es scheint nicht zu funktionieren. In myfunction arg1 arg2 "this is arg3"
wird die is arg3
ausgestreift.
Und die Art, wie ich diese Funktion verwenden ist in einem Skript, etwa so:
name=$(validateEntry $1)
Ich brauche Hilfe mit diesen.
edit:
Die Idee ist es, die validateEntry
Funktion in einem Skript zu verwenden, die nehmen, lassen Sie uns sagen, 3 Argumente, etwa so:
if [[ "$#" -eq 3 ]]; then
arg1=$(validateEntry $1)
arg2=$(validateEntry $2)
arg3=$(validateEntry $3)
echo "${arg1}, ${arg2}, ${arg3}."
fi
Aber wenn dritte Argument ist mein Skript ist this is arg3
, $arg3
zu this
reduziert wird, obwohl, wenn ich direkt meine die Funktion aufrufen, mit den gleichen drei Argumente, die dritte arg this is arg3
Ich nehme zur Kenntnis haben können, dass ich bash auf OSX leite. Deine drei Lösungen scheinen nicht zu funktionieren. –
Wenn in einem der doppelt zitierten Parameter Sonderzeichen enthalten sind (d. H.! @ #% $), Wird die Shell das Argument nicht erweitern und einen Fehler ausgeben? – SArnab
Dies ist, wie ich es benutze: 'validateEntry" Dies ist mein Eintrag " -bash: [Dies ist mein Eintrag: Syntaxfehler im Ausdruck (Fehler Token ist" ist mein Eintrag ")' –