Antworten:
Verwenden Sie ${ }
diese Option, um eine Variable einzuschließen.
Ohne geschweifte Klammern:
VAR="foo"
echo $VAR
echo $VARbar
Würde geben
foo
und nichts, weil die Variable $VARbar
nicht existiert.
Mit geschweiften Klammern:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
Würde geben
foo
foobar
Die erste $VAR
ist nicht notwendig, aber eine gute Praxis.
Für Ihr Beispiel:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Dies funktioniert für bash
, zsh
, ksh
, vielleicht auch andere.
${ }
keine Verkettung vorliegt. Zum Beispiel ELP=elp && echo $ELP && man --h${EPL}
funktioniert nicht.
Verketten Sie einfach den Inhalt der Variablen mit dem, was Sie sonst noch verketten möchten, z
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Die doppelten Anführungszeichen haben nichts mit Verkettung zu tun: Auch hier >$WEBSITE.sql
hätte es funktioniert. Sie werden bei Variablenerweiterungen benötigt, wenn der Wert der Variablen einige Shell-Sonderzeichen (Leerzeichen und \[?*
) enthält. Ich empfehle dringend, alle Variablenerweiterungen und Befehlsersetzungen in doppelte Anführungszeichen zu setzen, dh immer schreiben "$WEBSITE"
und "$(mycommand)"
.
Weitere Einzelheiten finden Sie unter $ VAR vs $ {VAR} und unter Zitieren oder Nichtzitieren .
Normalerweise verwende ich Zitate, z echo "$WEBSITE.sql"
.
So könnte man es schreiben:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
ein Variablenname kein gültiges Zeichen enthält. Siehe Wag's Antwort, wenn Sie einen String verketten möchten, der mit gültigen Zeichen beginnt (zB "$ WEBSITEsql" würde nicht funktionieren)