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
foo
separado (como parece probable), puede usar lo siguiente:Si tiene
rcexpandparam
configurada la opción, no necesita^
en ninguno de los ejemplos para habilitar este comportamiento.(Nota: durante la prueba, también tuve la
shwordsplit
opció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+glob
estaba desactivado por defecto enzsh
.En
zsh
puede utilizar el argumento-C
de número de columnas especificado paraprint
gustar:...Llegar...
... sin
$IFS
dividir lo siguiente:...huellas dactilares...
... pero puedes hacer eso antes de abajo como ...
...o...
fuente
foobad foobaz barbad barbaz
con {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
fish
shell, tiene ese comportamiento por defecto, ya que la expansiónfish
se realiza de derecha a izquierda :fuente