Để 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 exechoặ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ý $0với bash -c. Cụ thể hơn, hãy xem xét lệnh bên dưới, sử dụng bash -cnhư đượ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 -ctù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ừ $1và 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.