Я могу выполнить команду для каждого результата файла подстановка в ЗШ Без для?


Я ищу 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

Можно было бы сделать, используя для. Но, может быть, есть способ сделать это короче? Может быть, как использование двойных фигурных скобок вокруг глобуса или ну и что?

Спасибо. :)

2   5   2011-10-13 11:24:16

2 ответа:

Возможно, вы ищете zargs, команда с той же целью, что и xargs, но более разумный интерфейс.

autoload -U zargs
zargs -n 1 -- * -- mycommand

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

printf -- "--- %s\n"  [a-c]*

Чтобы выполнить команду для каждого файла, вам нужно xargs: я предполагаю, что у вас есть GNU xargs, который имеет опцию -0:

printf "%s\0" [a-c]* | xargs -0 -I FILE echo aa FILE bb

Замените команду echo xargs на все, что вам нужно, используя заполнитель "FILE", где вам нужно имя файла.

Используйте свое собственное суждение, чтобы определить, действительно ли это лучше или более ремонтопригодно, чем цикл for.