Um festzustellen, ob der Inhalt einer Datei leer ist, verwenden Sie die Anweisung:
if test -z `cat filename`
Wenn der Dateiname leer ist oder nur eine Zeichenfolge ohne enthält Leerzeichen, alles ist normal, andernfalls werden Fehler wie „zu viele Argumente“ oder sogar „Binäroperator erwartet“ gemeldet.
Ursachenanalyse:
Die Leerzeichen und Wagenrückläufe im Dateinamen verwirren Bash.
Wenn die Umgebungsvariable nicht in doppelte Anführungszeichen gesetzt wird, geht Bash davon aus, dass die Bedingung zu viele unabhängige Variablen enthält.
Sie können dieses Problem beseitigen, indem Sie das Zeichenfolgenargument in doppelte Anführungszeichen setzen.
Es scheint, dass viele ähnliche Programmierfehler vermieden werden, wenn man sich angewöhnt, alle String-Argumente in doppelte Anführungszeichen zu setzen.
Lösung:
Fügen Sie einfach doppelte Anführungszeichen zum Befehlsausführungsteil hinzu:
if test -z "`cat filename`"
Lösung 2 für die zu vielen Argumente der Shell:
Heute habe ich Gelegentlich ist ein seltsames Problem aufgetreten, um ein kleines Problem zu lösen. Die Zusammenfassung lautet wie folgt: Wenn [ -z ` lsof -i: 22 ` ] //Diese Schreibweise wird zu viele Argumente melden, ändern Sie es in [[ -z ` lsof -i:22 ` ]]
🎜> Sonst Fi
Wenn dieses einfache Shell-Skript ausgeführt wird, meldet es immer ZU VIELE ARGUMENTE. Einfach ausgedrückt: „[[ ]]“ ist vielseitiger als „[ ]“. Um dieses Problem zu vermeiden, ersetzen Sie einfach „. [ ]" mit "[[ ]]" . Darüber hinaus ist „[[ ]]“ fehlertoleranter als „[ ]“, d. h. Fehler, die in „[ ]“ gemeldet werden können, werden möglicherweise nicht in „[[ ]]-Strukturen wie &&, || gemeldet usw. Diese Art der logischen Beurteilung steht nicht im Mittelpunkt dieses Artikels, daher werde ich sie kurz erwähnen.
Weitere verwandte Artikel zur Lösung des Problems zu vieler Argumente in Linux Bash finden Sie hier zur chinesischen PHP-Website!