Tôi đang cố hiểu một kịch bản Bash. Tôi tình cờ gặp phải điều này:Mở rộng tham số Bash hoạt động như thế nào?
DIR=${1:-"/tmp"}
Điều đó có nghĩa là gì?
Tôi đang cố hiểu một kịch bản Bash. Tôi tình cờ gặp phải điều này:Mở rộng tham số Bash hoạt động như thế nào?
DIR=${1:-"/tmp"}
Điều đó có nghĩa là gì?
:-
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
$
cú pháp Đó là parameter expansion:
${parameter:-word}
Nếu
parameter
không được đặt hoặc không, việc mở rộngword
được thay thế. Nếu không, giá trị củaparameter
đượ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.
Cảm ơn bạn đã liên kết hữu ích. – user469083
Cảm ơn bạn đã nói rõ. Stack overflow quá nhanh :) – user469083
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. –