
Was ist der Unterschied zwischen:
./script.sh "$VARIABLE"
Und
./script.sh ${VARIABLE}
Gibt es irgendwelche?
Antwort1
$VARIABLE
und ${VARIABLE}
sind praktisch gleich, wenn es sich um eigenständige Wörter handelt. Beachten Sie jedoch das folgende Beispiel, insbesondere in einem Skript
VARIABLE=USER
echo $VARIABLE
Sie erhalten eine Ausgabe
USER
aber wenn Sie tippen
echo $VARIABLE1
erwartet zu bekommen
USER1
Sie erhalten nichts, da keine Variable wie VARIABLE1
definiert vorhanden ist
Aber wenn Sie verwenden
echo ${VARIABLE}1
Sie erhalten die erwartete USER1
Ausgabe.
Antwort2
von Shawn J. Goff:$VAR vs. ${VAR} und zitieren oder nicht zitieren
VAR=$VAR1 ist eine vereinfachte Version von VAR=${VAR1}. Die zweite Version kann Dinge, die die erste nicht kann, z. B. einen Array-Index referenzieren (nicht portierbar) oder einen Teilstring entfernen (POSIX-portabel). Weitere Informationen finden Sie im Abschnitt „Mehr zu Variablen“ des Bash-Handbuchs für Anfänger und in der Parametererweiterung in der POSIX-Spezifikation.
Es ist eine gute Idee, eine Variable in Anführungszeichen zu setzen, wie in rm -- "$VAR1" oder rm -- "${VAR}". Dadurch wird der Inhalt der Variable zu einer atomaren Einheit. Wenn der Variablenwert Leerzeichen (also Zeichen in der speziellen Variable $IFS, standardmäßig Leerzeichen) oder Globbing-Zeichen enthält und Sie ihn nicht in Anführungszeichen setzen, wird jedes Wort für die Dateinamengenerierung (Globbing) berücksichtigt, dessen Erweiterung so viele Argumente wie möglich für das ergibt, was Sie gerade tun.