En zsh (y otros shells), si incluyo un argumento como (por ejemplo):
{a,b,c}{d,e,f}
la expansión de llaves lo convierte en:
ad ae af bd be bf cd ce cf
Para mis propósitos, el orden de los argumentos es importante, y necesito las llaves para expandir de derecha a izquierda en lugar de izquierda a derecha. Es decir, quiero que la expansión sea:
ad bd cd ae be ce af bf cf
¿Hay alguna manera de controlar el orden en que se expanden múltiples conjuntos de llaves? Estoy buscando algo que funcione en cualquier situación, no solo con estos argumentos.
zsh
brace-expansion
Michael Mrozek
fuente
fuente

{a,b,c}{d,e,f}no es muy útilRespuestas:
Puede combinar la expansión de parámetros con la expansión de llaves.
Si no desea definir por
fooseparado (como parece probable), puede usar lo siguiente:Si tiene
rcexpandparamconfigurada la opción, no necesita^en ninguno de los ejemplos para habilitar este comportamiento.(Nota: durante la prueba, también tuve la
shwordsplitopción configurada. Si no la tiene configurada, intente, por ejemploecho {a,b,c}${^=:-d e f}. Moraleja de la historia: casi todo es posiblezsh, pero debe asegurarse de estar utilizando la correcta combinación de opciones y sintaxis.)fuente
print -- {a,b,c}${^=:-d e f}como ejemplo principal, ya que cuandosplit+globestaba desactivado por defecto enzsh.En
zshpuede utilizar el argumento-Cde número de columnas especificado paraprintgustar:...Llegar...
... sin
$IFSdividir lo siguiente:...huellas dactilares...
... pero puedes hacer eso antes de abajo como ...
...o...
fuente
foobad foobaz barbad barbazcon {foo, bar} {bad, baz} `?Puede poner un número al final de cada elemento del segundo conjunto y luego ordenar el último carácter:
Aún mejor sería agregar números después de un separador (espacio), para cortar campos, no caracteres:
fuente
En
fishshell, tiene ese comportamiento por defecto, ya que la expansiónfishse realiza de derecha a izquierda :fuente