Risposte:
Utilizzare ${ }per racchiudere una variabile.
Senza parentesi graffe:
VAR="foo"
echo $VAR
echo $VARbar
darebbe
foo
e niente, perché la variabile $VARbarnon esiste.
Con parentesi graffe:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
darebbe
foo
foobar
Racchiudere il primo $VARnon è 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.sqlavrebbe 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)