Я выполнил следующую команду: ff 'hac-launcher*

[root@foo log]# ff 'hac-launcher*'
./configserver/hac-launcher.log
./odb/hac-launcher.log
.
.

[root@foo log]# type ff
ff is a function
ff ()
{
    find . -type f -name $1 -print
}

However, if I try the same command right in the shell's command line, I get different results.
[root@btpvm0913 log]# find . -type f -name 'hac-launcher*' -print
./configserver/hac-launcher.log
./odb/hac-launcher.log.4
./odb/hac-launcher.log.3
./odb/hac-launcher.log.2
./odb/hac-launcher.log.1
./odb/hac-launcher.log

когда я запускаю команду прямо в приглашении оболочки, я получаю больше совпадающих файлов, тогда как тот же спецификация файла / регулярное выражение при использовании в функции оболочки сопоставляет меньшее количество файлов.

Как я могу убедиться, что вызов функции и выполнение встроенной команды дают одинаковые результаты?

1 ответ1

2

Ваша функция не заключила в кавычки переменную $1 , поэтому оболочка выполняет подстановочный знак для подставляемого значения. В результате фактическая команда, которую это выполняет

find . -type f -name hac-launcher.log -print

… На основе файлов в текущем каталоге. (И если бы в текущем каталоге было более одного совпадающего файла, это вызвало бы синтаксическую ошибку для поиска.)

Чтобы передать значение переменной без изменений, используйте "$1" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .