2012-12-07 27 views
17

Làm cách nào để gán giá trị cho tham số vị trí trong Bash? Tôi muốn chỉ định giá trị cho thông số mặc định:Chỉ định tham số vị trí

if [ -z "$4" ]; then 
    4=$3 
fi 

Cho biết 4 không phải là lệnh.

Trả lời

29

Các set built-in là cách duy nhất để thiết lập các thông số vị trí

$ set -- this is a test 
$ echo $1 
this 
$ echo $4 
test 

nơi -- bảo vệ chống lại những điều mà trông giống như tùy chọn (ví dụ -x).

Trong trường hợp của bạn, bạn có thể muốn:

if [ -z "$4" ]; then 
    set -- "$1" "$2" "$3" "$3" 
fi 

nhưng nó có lẽ sẽ rõ ràng hơn như

if [ -z "$4" ]; then 
    # default the fourth option if it is null 
    fourth="$3" 
    set -- "$1" "$2" "$3" "$fourth" 
fi 

bạn cũng có thể muốn xem xét các thông số đếm $# thay vì thử nghiệm cho -z.

3

Bạn có thể làm những gì bạn muốn bằng cách gọi kịch bản của bạn một lần nữa với một tham số thứ tư:

if [ -z "$4" ]; then 
    $0 "$1" "$2" "$3" "$3" 
    exit $? 
fi 
echo $4 

Calling trên kịch bản như ./script.sh one two three chí đầu ra:

ba

+0

'./ $ 0' sẽ không hoạt động nếu tập lệnh được truy cập thông qua PATH, '$ 0' sẽ không sao nếu nó hoạt động với'./Script' và '/ usr/local/bin/script', v.v. – msw

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