Shell globbing без совпадающих файлов

Я часто использую globaling имя файла оболочки, чтобы делать такие вещи, как работать со всеми /dev/sda , /dev/sdb , /dev/sdc и т. Д., Делая /dev/sd[af] , однако это зависит от наличия файлы на диске, соответствующие этому шаблону. Сегодня я хотел запустить gitk на каждом из master@{1} , master@{2} и т. Д., Но gitk master@{[1-5]} не работает, так как нет имен файлов, соответствующих этому шаблону на диске.

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

Вы не можете выполнять shell-перетаскивание без соответствующих файлов. Вам необходимо расширить брекет :

 gitk master@{{1..5}} 

или:

 gitk master@{{1,2,3,4,5}} 

С формой {x..y} вам понадобятся zsh 2.6-beta4 и позже, bash 3.0 и более поздние, ksh93r и позже.

{x,y} была оригинальной в csh и скопирована в Bourne как shell сначала в ksh .

По крайней мере, в bash вы можете использовать диапазоны, например

 $ echo gitk master@{{1..5}} gitk master@{1} master@{2} master@{3} master@{4} master@{5} 

Очевидно, что эхо используется выше, чтобы показать, что происходит.

Он также работает для писем:

 $ echo /dev/sd{x..z} /dev/sdx /dev/sdy /dev/sdz 

Примечание: сопоставление glob и соответствие регулярных выражений. Это две разные вещи. Оболочка выполняет сопоставление glob. Таким образом, регулярное выражение Shell regex – это не вещь.