Ответы:
Используйте ${ }
для включения переменной.
Без фигурных скобок:
VAR="foo"
echo $VAR
echo $VARbar
даст
foo
и ничего, потому что переменная $VARbar
не существует.
С фигурными скобками:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
даст
foo
foobar
Вложение первого $VAR
не обязательно, но хорошая практика.
Для вашего примера:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Это работает bash
, zsh
, ksh
, возможно , другие тоже.
${ }
это не было объединением ни в каком смысле. Например, ELP=elp && echo $ELP && man --h${EPL}
не работает.
Просто объедините содержимое переменной с тем, что вы хотите объединить, например,
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Двойные кавычки не связаны с конкатенацией: здесь >$WEBSITE.sql
бы тоже сработало. Они необходимы для раскрытия переменных, когда значение переменной может содержать некоторые специальные символы оболочки (пробел и \[?*
). Я настоятельно рекомендую помещать двойные кавычки вокруг всех расширений переменных и подстановок команд, т. Е. Всегда писать "$WEBSITE"
и "$(mycommand)"
.
Для получения более подробной информации, смотрите $ VAR vs $ {VAR} и чтобы цитировать или не цитировать .
Я обычно использую цитаты, например echo "$WEBSITE.sql"
.
Так что вы можете написать это так:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
как не является допустимым символом в имени переменной; см . ответ wag, если вы хотите объединить строку, которая начинается с допустимых символов (например, «$ WEBSITEsql» не сработает)