Para fornecer adições e esclarecimentos a algumas das outras respostas, se você estiver usando a opção em massa para execou execdir( -exec command {} +) e quiser recuperar todos os argumentos posicionais, é necessário considerar o tratamento $0com bash -c. Mais concretamente, considere o comando abaixo, que é usado bash -ccomo sugerido acima, e simplesmente reproduz os caminhos de arquivo que terminam com '.wav' em cada diretório encontrado:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
O manual do bash diz:
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.
Aqui 'check $@'está a sequência de comandos e _ {}os argumentos após a sequência de comandos. Observe que $@é um parâmetro posicional especial no bash que se expande para todos os parâmetros posicionais a partir de 1 . Observe também que, com a -copção, o primeiro argumento é atribuído ao parâmetro posicional $0. Isso significa que, se você tentar acessar todos os parâmetros posicionais $@, obterá apenas parâmetros iniciando $1e subindo. Essa é a razão pela qual a resposta de Dominik possui o _parâmetro $0, que é um argumento fictício para preencher o parâmetro , para que todos os argumentos que desejamos estejam disponíveis mais tarde, se usarmos$@ expansão de parâmetros, por exemplo, ou o loop for, como nessa resposta.
Obviamente, semelhante à resposta aceita, bash -c 'shell_function $0 $@'também funcionaria passando explicitamente $0, mas novamente, você deve ter em mente que $@não funcionará conforme o esperado.
$0.