Ich versuche, das folgende Shell-Skript auszuführen, das prüfen soll, ob eine Zeichenfolge weder Leerzeichen noch Leerzeichen enthält. Ich erhalte jedoch die gleiche Ausgabe für alle 3 genannten Zeichenfolgen. Ich habe versucht, auch die Syntax "[[" zu verwenden, aber ohne Erfolg.
Hier ist mein Code:
str="Hello World"
str2=" "
str3=""
if [ ! -z "$str" -a "$str"!=" " ]; then
echo "Str is not null or space"
fi
if [ ! -z "$str2" -a "$str2"!=" " ]; then
echo "Str2 is not null or space"
fi
if [ ! -z "$str3" -a "$str3"!=" " ]; then
echo "Str3 is not null or space"
fi
Ich erhalte die folgende Ausgabe:
# ./checkCond.sh
Str is not null or space
Str2 is not null or space
var=value [command [args]]
ist die Syntax, in der einer Variablen ein Wert zugewiesen wird. Zum Vergleich ist[
(/usr/bin/[
) der Befehl und erfordert, dass var1 ,! = & var2 3 separate Argumente sind. var1! = var2 ist ein einzelnes Argument.Zum Überprüfen der leeren Zeichenfolge in der Shell
ODER
quelle
=
. Dies==
ist ein nicht portabler Hack, der von Shell-Autoren erfunden wurde, um die Gedanken junger Programmierer durcheinander zu bringen.Wenn Sie nicht nur einzelne Leerzeichen, sondern auch Leerzeichen überprüfen müssen, können Sie Folgendes tun:
So entfernen Sie eine Reihe von zusätzlichen Leerzeichen (verdichtet auch Leerzeichen in der Mitte auf ein Leerzeichen):
Die
--
stellt sicher , dass , wenn$original
enthält Schalter durch Echo verstanden, werden sie immer noch als normale Argumente betrachtet werden werden wiederholt. Es ist auch wichtig, nicht zu setzen""
um$original
, oder die Räume werden nicht entfernt bekommen.Danach können Sie einfach überprüfen, ob
$trimmed
es leer ist.quelle
Ein weiterer schneller Test für eine Zeichenfolge, um etwas anderes als Leerzeichen zu enthalten.
"-n" bedeutet eine Zeichenfolge ungleich Null.
Dann stimmen die ersten beiden Schrägstriche mit allen folgenden Punkten überein , in unserem Fall mit Leerzeichen. Dann folgt auf den dritten Schrägstrich die Ersatzzeichenfolge (leer) und wird mit "}" geschlossen. Beachten Sie den Unterschied zur üblichen Syntax für reguläre Ausdrücke.
Weitere Informationen zur Manipulation von Zeichenfolgen in Bash-Shell-Skripten finden Sie hier .
quelle
[[ -n "$1" ]]
dasselbe wie[[ ! -z "$1" "]]
?So überprüfen Sie, ob eine Zeichenfolge leer ist oder nur Leerzeichen enthält:
Siehe Shell-Parametererweiterung und Musteranpassung im Bash-Handbuch.
quelle
Wenn Sie alle Zeilenumbrüche und Leerzeichen aus der Zeichenfolge entfernen, wird eine leere Zeile auf nichts reduziert, was getestet und bearbeitet werden kann
quelle