Para fornecer adições e esclarecimentos a algumas das outras respostas, se você estiver usando a opção em massa para exec
ou execdir
( -exec command {} +
) e quiser recuperar todos os argumentos posicionais, é necessário considerar o tratamento $0
com bash -c
. Mais concretamente, considere o comando abaixo, que é usado bash -c
como 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 -c
opçã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 $1
e 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
.