Respostas:
Use ${ }
para incluir uma variável.
Sem colchetes:
VAR="foo"
echo $VAR
echo $VARbar
daria
foo
e nada, porque a variável $VARbar
não existe.
Com colchetes:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
daria
foo
foobar
Não $VAR
é necessário incluir o primeiro , mas uma boa prática.
Para o seu exemplo:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Isso funciona para bash
, zsh
, ksh
, talvez outros também.
${ }
não seja concatenação em nenhum sentido. Por exemplo, ELP=elp && echo $ELP && man --h${EPL}
não funciona.
Apenas concatene o conteúdo da variável para o que mais você deseja concatenar, por exemplo
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
As aspas duplas não estão relacionadas à concatenação: aqui >$WEBSITE.sql
também teria funcionado. Eles são necessários para expansões de variáveis quando o valor da variável pode conter alguns caracteres especiais do shell (espaços em branco e \[?*
). Eu recomendo colocar aspas duplas em todas as expansões variáveis e substituições de comandos, ou seja, sempre escreva "$WEBSITE"
e "$(mycommand)"
.
Para mais detalhes, consulte $ VAR vs $ {VAR} e para citar ou não .
Eu costumo usar aspas, por exemplo echo "$WEBSITE.sql"
.
Então você pode escrever como:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
não é um caractere válido em um nome de variável; ver a resposta de wag se você quiser concatenar uma cadeia que se inicia com caracteres válidos (por exemplo, "$ WEBSITEsql" não iria funcionar)