Відповіді:
Використовуйте ${ }для закриття змінної.
Без фігурних дужок:
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 проти $ {VAR} і цитувати чи не цитувати .
Я зазвичай використовую цитати, наприклад echo "$WEBSITE.sql".
Отже, ви можете написати це так:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.не є дійсним символом в імені змінної; див . відповідь ваг, якщо ви хочете об'єднати рядок, який починається з дійсних символів (наприклад, "$ WEBSITEsql" не працює)