Para proporcionar adiciones y aclaraciones a algunas de las otras respuestas, si está utilizando la opción masiva para exec
o execdir
( -exec command {} +
), y desea recuperar todos los argumentos posicionales, debe considerar el manejo de $0
con bash -c
. Más concretamente, considere el siguiente comando, que utiliza bash -c
como 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 -c
opció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 $1
y 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
.