Лучший способ развернуть шаблон шарика?

если Вы хотите искать полную древовидную попытку

find . -exec grep -n blah  {} /; -ls  

или делает подобный

find . -exec grep -n blah {} /; -print
31
14.05.2013, 09:45
3 ответа

Просто позвольте ему расшириться в правой стороне объявления массива:

list=(../smth*/)          # grab the list
echo "${#list[@]}"        # print array length
echo "${list[@]}"         # print array elements
for file in "${list[@]}"; do echo "$file"; done  # loop over the array


Обратите внимание что опция оболочки nullglob потребности, которые будут установлены.
Это не установлено по умолчанию.
Это предотвращает ошибку в случае, если шарик (или один из нескольких шариков) не соответствует никакому имени.

Установите его в bash с

shopt -s nullglob

или в zsh с

setopt nullglob
42
27.01.2020, 19:38
  • 1
    И как я печатаю тот список впоследствии? –  Rogach 12.03.2012, 15:38
  • 2
    Это - просто эквидистантная антенная решетка. Можно сделать то, что Вы можете с любым массивом. Добавленный некоторые примеры. –  manatwork 12.03.2012, 15:44
  • 3
    Существует проблема. Если шаблон не соответствует никаким файлам, он печатает себя - который не очень хорош. –  Rogach 12.03.2012, 16:21
  • 4
    , shopt-s nullglob решает его. –  Rogach 12.03.2012, 16:25
  • 5
    @lindhe, unsetopt и тот же параметр, как используется для setopt. –  manatwork 05.12.2015, 20:48

Не нужно все усложнять:

echo your/stuff*
1
27.01.2020, 19:38

Я хотел использовать стандартный ввод (конвейер )на случай, если результирующая команда превысит лимит длины командной строки. У меня сработала следующая команда:

echo "../smth*/*" "/etc/cron*/" | xargs -n1 -I{} bash -O nullglob -c "echo {}" | xargs -n1

или для списка глобусов:

cat huge_glob_list.txt | xargs -n1 -I{} bash -O nullglob -c "echo {}" | xargs -n1
1
04.10.2021, 14:39

Теги

Похожие вопросы