Warum bekomme ich „zu viele Argumente“

Warum bekomme ich „zu viele Argumente“

Hier ist ein Teil meines Skripts, der mir sagt, dass ich in Zeile 3 zu viele Argumente habe:

#!/bin/bash
export LC_ALL='C'
if [ `echo "*file 2" | grep -o ^.` = '.' ]
then
    echo success
fi

Weiß jemand warum? Soweit ich das beurteilen kann, vergleiche ich nur zwei Argumente, "*" und "."

Antwort1

echo "*file 2" | grep -o ^.druckt *.

Da Sie eine Befehlsersetzung außerhalb von Anführungszeichen haben, wird sie einem Globbing (auch bekannt als Platzhalterübereinstimmung oder Dateinamengenerierung) und einer Worttrennung unterzogen. Wenn das aktuelle Verzeichnis nicht leer ist, *wird es auf die Liste der Dateien im aktuellen Verzeichnis erweitert. Jede Datei wird zu einem Token im [Befehl, was höchstwahrscheinlich ein Syntaxfehler ist.

Das Problem besteht darin, dass Sie die Befehlsersetzung nicht in Anführungszeichen gesetzt haben.Verwenden Sie immer doppelte Anführungszeichen um Variablen- und Befehlsersetzungenes sei denn, Sie haben einen guten Grund, sie wegzulassen.

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

SehenWarum gerät mein Shell-Skript ins Stocken, wenn es sich um Leerzeichen oder andere Sonderzeichen handelt?für eine ausführlichere Erklärung.

verwandte Informationen