Ну, предложения от работы Франческо. Но я все еще смущен поведением здесь.
Мы знаем, что использование символов без кавычек в команде поиска обычно приводит к ошибке. Для остроумия:
find . -name *.txt -print
find: пути должны предшествовать выражению: HowTo-Word-Split.txt' find:
possible unquoted pattern after predicate
-name '?
Однако помещение символа подстановки в одинарные кавычки (или экранирование, если оно содержит только 1 символ) будет работать так:
find . -name \*.txt -print
, который дает этот вывод (на две отдельные строки)
> ./HowTo-Word-Split.txt
> ./bash-parms.txt
Итак, в версии bash -c я думал следующее:
bash -c 'find . $0 $1 -print' "-name" "*.txt"
приведет к расширению * .txt даже перед передачей в строку cmd,
и использование одинарных кавычек приведет к попытке выполнения (после подстановки аргумента arg и эффекта -c)
find . -name *.txt -print
, который, как я только что продемонстрировал, не работает.
Однако, похоже, что с ключом -c связана какая-то магия, о чем свидетельствует установка -x в приглашении bash, например:
$ set -x
$ bash -c ' find . $0 "$1" -print' "-name" "*.txt"
+ bash -c ' find . $0 "$1" -print' -name '*.txt'
./HowTo-Word-Split.txt
./bash-parms.txt
Обратите внимание, что хотя я использовал двойные кавычки в строке -c, bash фактически выполнил поиск с одинарными кавычками, заключенными в аргумент, что заставило поиск работать.
Проблема решена. :)