Чтобы предоставить дополнения и пояснения к некоторым другим ответам, если вы используете опцию массового ввода для exec
или execdir
( -exec command {} +
) и хотите получить все позиционные аргументы, вам необходимо рассмотреть обработку $0
с bash -c
. Более конкретно, рассмотрим приведенную ниже команду, которая использует, bash -c
как предложено выше, и просто выводит пути к файлам, заканчивающиеся на «.wav», из каждого найденного каталога:
find "$1" -name '*.wav' -execdir bash -c 'echo $@' _ {} +
Руководство по bash гласит:
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.
Здесь 'check $@'
- командная строка, и _ {}
аргументы после командной строки. Обратите внимание, что $@
это специальный позиционный параметр в bash, который распространяется на все позиционные параметры, начиная с 1 . Также обратите внимание, что с помощью -c
опции первый аргумент назначается позиционному параметру $0
. Это означает, что если вы попытаетесь получить доступ ко всем позиционным параметрам с помощью $@
, вы получите только параметры, начиная с $1
и выше. Именно поэтому в ответе Доминика есть _
фиктивный аргумент для заполнения параметра $0
, поэтому все нужные нам аргументы будут доступны позже, если мы используем $@
расширение параметра, например, или цикл for, как в этом ответе.
Конечно, аналогично принятому ответу, bash -c 'shell_function $0 $@'
также будет работать явное прохождение $0
, но опять же, вы должны иметь в виду, что $@
это не сработает, как ожидалось.
$0
.