Вы можете просто передать my_variable
в качестве дополнительного аргумента оболочки: format
. (Обратите внимание, что $0
не является первым аргументом функции.)
#!/bin/bash
my_variable=100
format () {
echo $<b>1</b> # result of find
echo $<b>2</b> # my_variable
}
export -f format
find . -type f -exec bash -c <b>'format "$1" "$2"' bash {} "$my_variable"</b> \;
Пустой аргумент bash
используется для установки $0
в команде, так что {}
является первым позиционный аргумент для передачи format
.
Чтобы уменьшить количество раз, которое вам нужно запустить bash
, вы можете использовать форму -exec ... +
:
find . -type f -exec bash -c 'v=$1; shift; for f; do format "$f" "$v"; done' \
bash "$my_variable" {} +
Это проходит несколько файлов в оболочку одновременно; скрипт отвечает за извлечение my_variable
из списка аргументов, а затем перебирает остальные, вызывая format
один раз для файла.