2010-10-07 32 views

Trả lời

8

:- thực sự là một nhà điều hành nó nói rằng nếu $1 (số đầu tiên vào kịch bản) không được thiết lập hoặc là null sau đó sử dụng /tmp như giá trị của $DIR và nếu nó được đặt gán giá trị của nó để $DIR.

DIR=${1:-"/tmp"} 

là viết tắt của

if [ -z $1 ]; then 
     DIR='/tmp' 
else 
     DIR="$1" 
fi 

Nó có thể được sử dụng với bất kỳ biến các thông số không chỉ vị trí:

$ echo ${HOME:-/tmp} # since $HOME is set it will be displayed. 
/home/codaddict 
$ unset HOME # unset $HOME. 
$ echo ${HOME:-/tmp} # since $HOME is not set, /tmp will be displayed. 
/tmp 
$ 
+0

Cảm ơn bạn đã nói rõ. Stack overflow quá nhanh :) – user469083

+1

Thứ nhất, như Gumbo đã nói trong câu trả lời của mình, ': -' không chỉ cho biến unset mà còn cho biến mở rộng thành một chuỗi rỗng. Sử dụng '-' (không có dấu hai chấm) để chỉ kiểm tra biến set/unset. Thứ hai, mã của bạn với DIR là sai bởi vì bạn không báo giá biến '$ 1'. Kết quả là, nếu nó mở rộng đến nhiều trường, một lỗi sẽ xảy ra. –

8

cú pháp Đó là parameter expansion:

${parameter:-word} 

Nếu parameter không được đặt hoặc không, việc mở rộng word được thay thế. Nếu không, giá trị của parameter được thay thế.

Vì vậy, nếu $1 là unset hoặc null, nó đánh giá để "/tmp" và với giá trị của $1 khác.

+1

Cảm ơn bạn đã liên kết hữu ích. – user469083

Các vấn đề liên quan