Risposte:
Utilizzare ${ }
per racchiudere una variabile.
Senza parentesi graffe:
VAR="foo"
echo $VAR
echo $VARbar
darebbe
foo
e niente, perché la variabile $VARbar
non esiste.
Con parentesi graffe:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
darebbe
foo
foobar
Racchiudere il primo $VAR
non è necessario, ma è una buona pratica.
Per il tuo esempio:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Questo funziona per bash
, zsh
, ksh
, forse anche gli altri.
${ }
non concatenare in alcun senso. Ad esempio, ELP=elp && echo $ELP && man --h${EPL}
non funziona.
Concatena i contenuti delle variabili a qualsiasi altra cosa desideri concatenare, ad es
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Le doppie virgolette non sono correlate alla concatenazione: anche qui >$WEBSITE.sql
avrebbe funzionato. Sono necessari intorno alle espansioni di variabili quando il valore della variabile potrebbe contenere alcuni caratteri speciali della shell (spazi bianchi e \[?*
). Consiglio vivamente di mettere le virgolette doppie attorno a tutte le espansioni variabili e sostituzioni di comandi, ovvero scrivere sempre "$WEBSITE"
e "$(mycommand)"
.
Per maggiori dettagli, vedi $ VAR vs $ {VAR} e per citare o non citare .
Di solito uso le virgolette, ad es echo "$WEBSITE.sql"
.
Quindi potresti scriverlo come:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
non è un carattere valido in un nome di variabile; vedi la risposta di wag se vuoi concatenare una stringa che inizia con caratteri validi (es. "$ WEBSITEsql" non funzionerebbe)