No zsh (e em outros shells), se eu incluir um argumento como (por exemplo):
{a,b,c}{d,e,f}
expansão chave transforma em:
ad ae af bd be bf cd ce cf
Para meus propósitos, a ordem dos argumentos é importante e preciso que os colchetes se expandam da direita para a esquerda em vez de da esquerda para a direita. Ou seja, eu quero que a expansão seja:
ad bd cd ae be ce af bf cf
Existe uma maneira de controlar a ordem em que vários conjuntos de chaves são expandidos? Estou procurando algo que funcione em qualquer situação, não apenas com esses argumentos.
zsh
brace-expansion
Michael Mrozek
fonte
fonte
{a,b,c}{d,e,f}
não é muito útilRespostas:
Você pode combinar a expansão de parâmetros com a expansão de chaves.
Se você não deseja definir
foo
separadamente (como parece provável), pode usar o seguinte:Se você tiver a
rcexpandparam
opção definida, não precisará do^
exemplo para ativar esse comportamento.(Nota: durante o teste, eu também tive a
shwordsplit
opção definida. Se você não a tiver definido, tente, por exemploecho {a,b,c}${^=:-d e f}
. Moral da história: quase tudo é possívelzsh
, mas você precisa se certificar de que está usando o método correto. combinação de opções e sintaxe.)fonte
print -- {a,b,c}${^=:-d e f}
como exemplo principal, pois quandosplit+glob
foi desativado por padrão emzsh
.Em
zsh
você pode usar o-C
número especificado de argumentos de colunas paraprint
gostar:...para obter...
... sem
$IFS
dividir o seguinte:... imprime ...
... mas você pode fazer isso do outro lado antes para baixo como ...
...ou...
fonte
foobad foobaz barbad barbaz
de {foo, bar} {bad, baz} `?Você pode colocar o número no final de cada elemento do segundo conjunto e classificar o último caractere:
Melhor ainda seria adicionar números após um separador (espaço), cortar campos, não caracteres:
fonte
No
fish
shell, você tem esse comportamento por padrão, pois a expansão emfish
é realizada da direita para a esquerda :fonte