$ @ Có nghĩa là một tham số chức năng tập lệnh bash


16

Điều gì có $@nghĩa là một tham số chức năng bash script?

Thí dụ:

function foo()
{
    echo "$@" 1>&2;
}

Câu trả lời:


20

Các $@biến mở rộng tới tất cả các thông số được sử dụng khi gọi hàm, vì vậy

function foo()
{
    echo "$@"
}

foo 1 2 3

sẽ hiển thị 1 2 3. Nếu không được sử dụng bên trong một hàm, nó chỉ định tất cả các tham số được sử dụng khi gọi tập lệnh. Xem trang hướng dẫn bash để biết thêm.


11

$ @ là một trong hai biểu diễn "tham số vị trí" trong bash, cái còn lại là $ *.

Cả hai, $ @ và $ * là các biến bash nội bộ mà đại diện cho tất cả các tham số được truyền vào một chức năng hoặc một kịch bản, với một sự khác biệt quan trọng , $ @ có mỗi tham số như là một chuỗi trích dẫn riêng biệt, trong khi $ * có tất cả các thông số như một đơn chuỗi. Sự khác biệt đó được thể hiện trong đoạn mã sau:

foo() {
  while [ "$1" != "" ]; do
      echo $1
    shift
  done
}

dollar_at () {
    foo "$@"
}

dollar_star () {
    foo "$*"
}

echo "Using \$@"
dollar_at a b c

echo "Using \$*"
dollar_star a b c

Đầu ra:

Using $@
a
b
c
Using $*
a b c

Lưu ý, khi được gọi bằng $ *, chính xác một đối số được truyền cho foo (), nhưng với $ @ ba đối số được truyền cho foo ().

Thông tin thêm: http://tldp.org/LDP/abs/html/iternalvariables.html#APPREF


0

Tôi hy vọng nó có nghĩa là lấy một hàm băm tất cả các tham số đầu vào. Vì vậy, nếu có 3 tham số đầu vào, chúng sẽ có sẵn trong hàm dưới dạng $ 1, $ 2, $ 3


2
Không, nó là một biến nội bộ có nghĩa là tất cả các tham số được cung cấp cho một hàm. Họ có sẵn như $1, $2vv dù thế nào, không phân biệt $@.
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.