Відповіді:
Використовуйте ${ }
для закриття змінної.
Без фігурних дужок:
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" не працює)