Odpowiedzi:
Służy ${ }
do zamykania zmiennej.
Bez nawiasów klamrowych:
VAR="foo"
echo $VAR
echo $VARbar
dałbym
foo
i nic, ponieważ zmienna $VARbar
nie istnieje.
Z nawiasami klamrowymi:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
dałbym
foo
foobar
Załączenie pierwszego $VAR
nie jest konieczne, ale jest dobrą praktyką.
Na przykład:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Działa to bash
, zsh
, ksh
, może inni też.
${ }
w żadnym sensie nie była to konkatenacja. Na przykład ELP=elp && echo $ELP && man --h${EPL}
nie działa.
Po prostu połącz zmienną zawartość z czymkolwiek, co chcesz połączyć, np
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Podwójne cytaty nie mają związku z konkatenacją: tutaj też >$WEBSITE.sql
by to działało. Są one potrzebne wokół rozszerzeń zmiennych, gdy wartość zmiennej może zawierać niektóre znaki specjalne powłoki (białe znaki i \[?*
). Zdecydowanie zalecam umieszczanie podwójnych cudzysłowów wokół wszystkich rozszerzeń zmiennych i podstawień poleceń, tj. Zawsze pisz "$WEBSITE"
i "$(mycommand)"
.
Aby uzyskać więcej informacji, zobacz $ VAR vs $ {VAR} i cytować lub nie cytować .
Zazwyczaj używam cytatów, np echo "$WEBSITE.sql"
.
Możesz więc napisać to tak:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
nie jest poprawnym znakiem w nazwie zmiennej; zobacz odpowiedź wag, jeśli chcesz połączyć łańcuch zaczynający się od prawidłowych znaków (np. „$ WEBSITEsql” nie zadziała)