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?