2009-06-30 4 views
6

Có ai biết điều gì là: = cho?Tập lệnh Bash là gì: = cho?

Tôi đã thử googling nhưng có vẻ như google lọc tất cả biểu tượng?

Tôi biết dưới đây là một cái gì đó giống như kiểm tra xem biến HOME là một thư mục và sau đó một cái gì đó không bằng chuỗi rỗng.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

Trả lời

14

Từ Bash Reference Manual:

${parameter:=word}

Nếu tham số là unset hoặc null, việc mở rộng các từ được gán cho tham số. Giá trị của tham số là sau đó được thay thế. Tham số vị trí và thông số đặc biệt có thể không được chỉ định theo cách này.

Về cơ bản nó sẽ gán giá trị của word-parameter khi và chỉ khi parameter là unset hoặc null.

+0

đánh bại tôi bằng một thứ hai :) –

+0

Và tôi bởi hai;) – bedwyr

+0

Tôi đã nhìn thấy: = a rất nhiều nơi. Thông thường tôi đọc nó là "được xác định bởi". Trong C++, C#, Java (+ một trăm địa điểm khác): = = =. Và khi điều này là đúng, ussually = bằng ==. Wow - đó là một điểm tinh tế của tôi. Xin lỗi vì đã quá tệ khi giải thích bản thân mình :) – cwap

1

Từ trang người đàn ông Bash:

Gán Giá trị mặc định. Nếu thông số không được đặt hoặc không, việc mở rộng từ được gán cho tham số . Giá trị của tham số sau đó được thay thế. Tham số vị trí và thông số đặc biệt có thể không được chỉ định theo cách này.

Trang người đàn ông là một điều tuyệt vời. man bash sẽ cho bạn biết hầu hết mọi thứ bạn muốn biết về Bash.

0

Ở đây "${HOME:=}" là ít nhiều không có, vì nó trả về $ HOME nếu được đặt và không có gì nếu không.

if [ "${HOME:=}" != "" ] && [ -d ${HOME} ] 

này sẽ hoạt động hệt:

if [ "${HOME}" != "" ] && [ -d ${HOME} ] 

Nếu bạn có một cái gì đó sau dấu bằng, phần đầu tiên của if sẽ luôn luôn là sự thật.

if [ "${HOME:=here}" != "" ] && [ -d ${HOME} ] 

bất cứ điều gì xảy ra bạn luôn nhận được chuỗi không bằng "".

Tuy nhiên, điều này sẽ phụ thuộc vào việc $ HOME và $ DEFAULT đều null:

if [ "${HOME:=$DEFAULT}" != "" ] && [ -d ${HOME} ] 
+0

Nó không hoàn toàn là một no-op, vì nếu $ HOME không xác định, nó sẽ được đặt thành chuỗi rỗng. – camh

+0

@camh: Trong bash, hầu như không có sự khác biệt giữa một biến không xác định và một với một giá trị null. –