В zsh (и других оболочках), если я включу аргумент, например (например):
{a,b,c}{d,e,f}
расширение скобки превращает это в:
ad ae af bd be bf cd ce cf
Для моих целей важен порядок аргументов, и мне нужно, чтобы фигурные скобки расширялись справа налево, а не слева направо. То есть я хочу, чтобы расширение было:
ad bd cd ae be ce af bf cf
Есть ли способ контролировать порядок расширения нескольких наборов скобок? Я ищу то, что будет работать в любой ситуации, а не только с этими аргументами.
zsh
brace-expansion
Михаил Мрозек
источник
источник
{a,b,c}{d,e,f}
не очень полезноОтветы:
Вы можете комбинировать расширение параметров с расширением фигурных скобок.
Если вы не хотите определять
foo
отдельно (как представляется вероятным), вы можете использовать следующее:Если у вас установлена
rcexpandparam
опция, вам не нужно^
ни в одном из примеров включать это поведение.(Примечание: во время тестирования у меня также была установлена
shwordsplit
опция. Если она не установлена, попробуйте, например,echo {a,b,c}${^=:-d e f}
Мораль истории: почти все возможноzsh
, но вы должны убедиться, что используете правильный сочетание параметров и синтаксиса.)источник
print -- {a,b,c}${^=:-d e f}
в качестве основного примера, так как, когдаsplit+glob
был выключен по умолчанию вzsh
.В
zsh
качестве аргумента вы можете использовать-C
указанное количество столбцовprint
:...получить...
... без
$IFS
разделения на следующее:... печать ...
... но вы можете сделать это раньше, как вниз ...
...или...
источник
foobad foobaz barbad barbaz
от {foo, bar} {bad, baz} `?Вы можете поставить число в конце каждого элемента второго набора и затем отсортировать по последнему символу:
Еще лучше добавить числа после некоторого разделителя (пробела), чтобы вырезать поля, а не символы:
источник
В
fish
оболочке такое поведение по умолчанию, поскольку расширение вfish
выполняется справа налево :источник