Untuk memberikan tambahan dan klarifikasi pada beberapa jawaban lain, jika Anda menggunakan opsi massal untuk execatau execdir( -exec command {} +), dan ingin mengambil semua argumen posisi, Anda perlu mempertimbangkan penanganan $0dengan bash -c. Lebih konkret, pertimbangkan perintah di bawah ini, yang digunakan bash -cseperti yang disarankan di atas, dan cukup gema jalur file yang diakhiri dengan '.wav' dari setiap direktori yang ditemukannya:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Manual bash mengatakan:
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.
Di sini, 'check $@'adalah string perintah, dan _ {}argumen setelah string perintah. Perhatikan bahwa $@adalah parameter posisi khusus dalam bash yang diperluas ke semua parameter posisi mulai dari 1 . Perhatikan juga bahwa dengan -copsi, argumen pertama ditugaskan ke parameter posisi $0. Ini berarti bahwa jika Anda mencoba mengakses semua parameter posisi dengan $@, Anda hanya akan mendapatkan parameter mulai dari $1dan ke atas. Itulah alasan mengapa jawaban Dominik memiliki _, yang merupakan argumen dummy untuk mengisi parameter $0, jadi semua argumen yang kita inginkan tersedia nanti jika kita menggunakan $@ekspansi parameter misalnya, atau untuk loop seperti dalam jawaban itu.
Tentu saja, mirip dengan jawaban yang diterima, bash -c 'shell_function $0 $@'juga akan bekerja dengan melewati secara eksplisit $0, tetapi sekali lagi, Anda harus ingat bahwa $@itu tidak akan berfungsi seperti yang diharapkan.
$0.