Câu trả lời:
Sử dụng ${ }
để bao vây một biến.
Không có dấu ngoặc nhọn:
VAR="foo"
echo $VAR
echo $VARbar
sẽ cho
foo
và không có gì, vì biến $VARbar
không tồn tại.
Với dấu ngoặc nhọn:
VAR="foo"
echo ${VAR}
echo ${VAR}bar
sẽ cho
foo
foobar
Bao gồm đầu tiên $VAR
là không cần thiết, nhưng một thực hành tốt.
Ví dụ của bạn:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql
Này hoạt động cho bash
, zsh
, ksh
, có lẽ những người khác quá.
${ }
không được ghép theo bất kỳ ý nghĩa nào. Ví dụ, ELP=elp && echo $ELP && man --h${EPL}
không hoạt động.
Chỉ cần nối các nội dung biến với bất kỳ nội dung nào khác mà bạn muốn nối, ví dụ:
/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"
Các trích dẫn kép không liên quan đến ghép nối: ở đây >$WEBSITE.sql
cũng sẽ làm việc. Chúng cần thiết xung quanh các mở rộng biến khi giá trị của biến có thể chứa một số ký tự đặc biệt shell (khoảng trắng và \[?*
). Tôi thực sự khuyên bạn nên đặt dấu ngoặc kép xung quanh tất cả các mở rộng biến và thay thế lệnh, nghĩa là luôn luôn viết "$WEBSITE"
và "$(mycommand)"
.
Để biết thêm chi tiết, xem $ VAR so với $ {VAR} và để trích dẫn hoặc không trích dẫn .
Tôi thường sử dụng dấu ngoặc kép, ví dụ echo "$WEBSITE.sql"
.
Vì vậy, bạn có thể viết nó như sau:
#!/bin/sh
WEBSITE="danydiop"
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"
.
không phải là một ký tự hợp lệ trong một tên biến; hãy xem câu trả lời của wag nếu bạn muốn nối chuỗi bắt đầu bằng các ký tự hợp lệ (ví dụ: "$ WEBSITEsql" sẽ không hoạt động)