Câu trả lời:
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.
$ @ 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
$1
,$2
vv dù thế nào, không phân biệt$@
.