Câu trả lời:
Có một cú pháp đặc biệt cho việc này:
for i do
printf '%s\n' "$i"
done
Tổng quát hơn, danh sách các tham số của tập lệnh hoặc hàm hiện tại có sẵn thông qua biến đặc biệt $@
.
for i in "$@"; do
printf '%s\n' "$i"
done
Lưu ý rằng bạn cần dấu ngoặc kép xung quanh $@
, nếu không các tham số trải qua quá trình mở rộng ký tự đại diện và tách trường. "$@"
là ma thuật: mặc dù có dấu ngoặc kép, nó mở rộng ra nhiều trường như có các tham số.
print_arguments () {
for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special !\characters' '-n' # prints 4 lines
print_arguments '' # prints one empty line
print_arguments # prints nothing
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
Bạn nên trích dẫn $@
bởi vì các đối số có thể chứa khoảng trắng (hoặc dòng mới, v.v.) nếu bạn trích dẫn chúng hoặc thoát chúng bằng a \
. Ví dụ:
./myscript one 'two three'
Đó là hai đối số chứ không phải ba, do các trích dẫn. Nếu bạn không trích dẫn $@
, những đối số đó sẽ bị phá vỡ trong tập lệnh.
for f; do ...