#shell #foreach #zsh #glob
#оболочка #foreach #zsh #глоб
Вопрос:
Я ищу away для выполнения текущей команды для каждого результата преобразования файла без создания цикла for. Я где-то это видел, но не могу вспомнить, где именно.
(Echo — это просто пример, он также должен работать, например, с psql)
Пример:
$ touch aaa bbb ccc ddd
$ echo "--- " [a-c]*
--- aaa bbb ccc
Желаемый результат:
--- aaa
--- bbb
--- ccc
Каким образом:
$ for i in [a-c]*; do echo "--- " $i ; done
--- aaa
--- bbb
--- ccc
Это можно сделать с помощью for . Но, может быть, есть способ сделать это короче? Может быть, например, использовать двойные фигурные скобки вокруг глобуса или что-то еще?
Спасибо. 🙂
Ответ №1:
Возможно, вы ищете zargs
команду с той же целью, xargs
но с более разумным интерфейсом.
autoload -U zargs
zargs -n 1 -- * -- mycommand
Ответ №2:
printf
Команда будет неявно зацикливаться, если в строке формата задано больше аргументов, чем заполнителей:
printf -- "--- %sn" [a-c]*
Чтобы выполнить команду для каждого файла, вам нужно xargs
: Я предполагаю, что у вас есть GNU xargs, у которого есть -0
опция:
printf "%s" [a-c]* | xargs -0 -I FILE echo aa FILE bb
Замените команду echo
xargs на все, что вам нужно, используя заполнитель «FILE», где вам нужно имя файла.
Используйте свое собственное суждение, чтобы определить, действительно ли это лучше или более ремонтопригодно, чем цикл for .
Комментарии:
1. О, спасибо, спасибо. Но на самом деле echo был просто примером. Фактическая команда, которую я хочу выполнить, — «psql … -f $ i» 🙂