Как вы можете использовать переменную для аргумента пути для команды поиска Unix? - PullRequest
0 голосов
/ 29 марта 2012

Команда Unix find не делает то, что я хочу.Вот ситуация

Если я печатаю: find ../tmp -name "\*tmp\*"

, он корректно выводит файлы, содержащие имя «tmp» в папке tmp

, но когда я печатаю:

dir=../tmp #assign ../tmp as a variable named dir

find ${dir} -name "\*tmp\*"

вывод говорит: Нет такого файла или каталога

Я предполагаю, что команда find предполагает, что переменная "dir" в качестве файла для поиска?Как я могу обойти эту проблему?Причина, по которой я хочу это знать, заключается в том, что я могу передать путь в качестве аргумента для моего сценария.Спасибо

----------- Дополнительный комментарий

Я использую оболочку bash.Извините за путаницу.Приведенный выше код работает.Настоящая проблема - когда я включаю структуру {} в переменную.Например, когда я набираю

dir = .. / {tmp1, tmp3} #assign ../ enjtmp1,tmp3} в качестве переменной с именем dir

find $ {dir} -name"* tmp *"

вывод говорит: нет такого файла или каталога Почему ??

Ответы [ 2 ]

3 голосов
/ 29 марта 2012

Командная строка оценивается сначала по команде, а затем выполняется любое действие (например, установка переменных среды, вызов программ).Поэтому $ dir устанавливается не раньше, чем оценивается командная строка.Одна возможность решить проблему - отделить настройку переменной от ее использования с помощью ;

dir=../tmp ; find "$dir" -name "tmp"

или записать команды в две отдельные строки (ответ Тируваллувара).

1 голос
/ 29 марта 2012

Это будет делать:

(из командной строки)

# dir="../tmp/whatever/your/directory"
# find $dir -name "*tmp*"
...