Para proporcionar adiciones y aclaraciones a algunas de las otras respuestas, si está utilizando la opción masiva para execo execdir( -exec command {} +), y desea recuperar todos los argumentos posicionales, debe considerar el manejo de $0con bash -c. Más concretamente, considere el siguiente comando, que utiliza bash -ccomo se sugirió anteriormente, y simplemente repite las rutas de archivo que terminan con '.wav' de cada directorio que encuentra:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
El manual de bash dice:
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.
Aquí, 'check $@'está la cadena de comando, y _ {}son los argumentos después de la cadena de comando. Tenga en cuenta que $@es un parámetro posicional especial en bash que se expande a todos los parámetros posicionales a partir de 1 . También tenga en cuenta que con la -copción, el primer argumento se asigna al parámetro posicional $0. Esto significa que si intenta acceder a todos los parámetros posicionales con $@, solo obtendrá parámetros a partir de $1y hacia arriba. Esa es la razón por la cual la respuesta de Dominik tiene el _, que es un argumento ficticio para completar el parámetro $0, por lo que todos los argumentos que queremos están disponibles más adelante si usamos la $@expansión de parámetros, por ejemplo, o el bucle for como en esa respuesta.
Por supuesto, similar a la respuesta aceptada, bash -c 'shell_function $0 $@'también funcionaría al pasar explícitamente $0, pero nuevamente, debe tener en cuenta que $@no funcionará como se esperaba.
$0.