Réponses:
Utilisez ${ }
pour enfermer une variable.
Sans accolades:
VAR="foo"
echo $VAR
echo $VARbar
donnerait
foo
et rien, car la variable $VARbar
n'existe pas.
Avec des accolades:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
donnerait
foo
foobar
Joindre le premier $VAR
n'est pas nécessaire, mais une bonne pratique.
Pour votre exemple:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Cela fonctionne pour bash
, zsh
, ksh
, peut - être d' autres aussi.
${ }
concaténation ne soit en aucun cas. Par exemple, ELP=elp && echo $ELP && man --h${EPL}
ne fonctionne pas.
Concaténez simplement le contenu de la variable avec tout ce que vous voulez concaténer, par exemple
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Les doubles guillemets ne sont pas liés à la concaténation: ici >$WEBSITE.sql
aurait également fonctionné. Ils sont nécessaires autour des extensions de variable lorsque la valeur de la variable peut contenir des caractères spéciaux du shell (espaces et \[?*
). Je recommande fortement de mettre des guillemets doubles autour de toutes les extensions de variables et substitutions de commandes, c'est-à-dire toujours écrire "$WEBSITE"
et "$(mycommand)"
.
Pour plus de détails, voir $ VAR vs $ {VAR} et pour citer ou ne pas citer .
J'utilise habituellement des guillemets, par exemple echo "$WEBSITE.sql"
.
Vous pouvez donc l'écrire comme:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
n'est pas un caractère valide dans un nom de variable; voir la réponse de wag si vous voulez concaténer une chaîne qui commence par des caractères valides (par exemple, "$ WEBSITEsql" ne fonctionnerait pas)