Wann tun, wenn Konstrukte keine eckigen Klammern erfordern?

Ich mache einige Hausaufgaben für eine Shell-Skriptklasse und hatte die Frage, ob ich ein Skript schreiben soll, das prüft, ob das eingegebene Argument ein gültiger Shell-Variablenname ist. Das folgende Skript scheint gut zu funktionieren.

if echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null
then
        echo yes
else
        echo no
fi

Ich verstehe, dass Klammern für die Testfunktion in der BASH-Shell kurz sind. Mein Problem ist, dass ich beim Versuch, das obige Skript in eckigen Klammern zu schreiben, eine Fehlermeldung erhalten habe.

if [ echo "$1" | grep -v ".*[^A-Za-z_]" > /dev/null ]

Das Problem dabei ist (glaube ich), dass grep versucht, das] als Argument zu verwenden, was zu einem Fehler führt, wenn das Skript ausgeführt wird.

In welchen Situationen brauche ich keine Klammern?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage