Pour apporter des ajouts et des clarifications à certaines des autres réponses, si vous utilisez l'option bulk pour exec
ou execdir
( -exec command {} +
) et que vous souhaitez récupérer tous les arguments de position, vous devez envisager la gestion de $0
with bash -c
. Plus concrètement, considérez la commande ci-dessous, qui utilise bash -c
comme suggéré ci-dessus, et fait simplement écho aux chemins de fichiers se terminant par '.wav' de chaque répertoire qu'il trouve:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Le manuel bash dit:
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.
Voici 'check $@'
la chaîne de commande et _ {}
les arguments après la chaîne de commande. Notez qu'il $@
s'agit d'un paramètre de position spécial dans bash qui s'étend à tous les paramètres de position à partir de 1 . Notez également qu'avec l' -c
option, le premier argument est affecté au paramètre positionnel $0
. Cela signifie que si vous essayez d'accéder à tous les paramètres de position avec $@
, vous n'obtiendrez que les paramètres commençant par $1
et plus. C'est la raison pour laquelle la réponse de Dominik a le _
, qui est un argument factice pour remplir le paramètre $0
, donc tous les arguments que nous voulons sont disponibles plus tard si nous utilisons l' $@
expansion des paramètres par exemple, ou la boucle for comme dans cette réponse.
Bien sûr, similaire à la réponse acceptée, bash -c 'shell_function $0 $@'
cela fonctionnerait également en passant explicitement $0
, mais encore une fois, vous devez garder à l'esprit que $@
cela ne fonctionnera pas comme prévu.
$0
.