Để cung cấp các bổ sung và làm rõ cho một số câu trả lời khác, nếu bạn đang sử dụng tùy chọn hàng loạt cho exec
hoặc execdir
( -exec command {} +
) và muốn truy xuất tất cả các đối số vị trí, bạn cần xem xét xử lý $0
với bash -c
. Cụ thể hơn, hãy xem xét lệnh bên dưới, sử dụng bash -c
như được đề xuất ở trên và chỉ đơn giản lặp lại các đường dẫn tệp kết thúc bằng '.wav' từ mỗi thư mục mà nó tìm thấy:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Hướng dẫn bash nói:
If the -c option is present, then commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the
positional parameters, starting with $0.
Ở đây, 'check $@'
là chuỗi lệnh và _ {}
là các đối số sau chuỗi lệnh. Lưu ý rằng đó $@
là một tham số vị trí đặc biệt trong bash mở rộng cho tất cả các tham số vị trí bắt đầu từ 1 . Cũng lưu ý rằng với -c
tùy chọn, đối số đầu tiên được gán cho tham số vị trí $0
. Điều này có nghĩa là nếu bạn cố gắng truy cập tất cả các tham số vị trí với $@
, bạn sẽ chỉ nhận được các tham số bắt đầu từ $1
và lên. Đó là lý do tại sao câu trả lời của Dominik có _
, đó là một đối số giả để điền tham số $0
, vì vậy tất cả các đối số chúng tôi muốn có sẵn sau này nếu chúng tôi sử dụng$@
mở rộng tham số, hoặc vòng lặp for như trong câu trả lời đó.
Tất nhiên, tương tự như câu trả lời được chấp nhận, bash -c 'shell_function $0 $@'
cũng sẽ hoạt động bằng cách vượt qua một cách rõ ràng $0
, nhưng một lần nữa, bạn sẽ phải nhớ rằng $@
sẽ không hoạt động như mong đợi.
$0
.