Dans zsh (et autres shells), si j'inclus un argument comme (par exemple):
{a,b,c}{d,e,f}
l'expansion de l'accolade le transforme en:
ad ae af bd be bf cd ce cf
Pour mes besoins, l'ordre des arguments est important, et j'ai besoin des accolades pour développer de droite à gauche au lieu de gauche à droite. Autrement dit, je veux que l'expansion soit:
ad bd cd ae be ce af bf cf
Existe-t-il un moyen de contrôler l'ordre dans lequel plusieurs jeux d'accolades sont développés? Je cherche quelque chose qui fonctionnera dans n'importe quelle situation, pas seulement avec ces arguments.
zsh
brace-expansion
Michael Mrozek
la source
la source
{a,b,c}{d,e,f}
n'est pas très utileRéponses:
Vous pouvez combiner l'expansion des paramètres avec l'expansion des accolades.
Si vous ne souhaitez pas définir
foo
séparément (comme cela semble probable), vous pouvez utiliser ce qui suit:Si l'
rcexpandparam
option est définie, vous n'avez pas besoin de^
dans l'un ou l'autre exemple pour activer ce comportement.(Remarque: lors des tests, j'ai également
shwordsplit
défini l' option. Si vous ne l'avez pas définie, essayez par exempleecho {a,b,c}${^=:-d e f}
. Morale de l'histoire: presque tout est possible danszsh
, mais vous devez vous assurer que vous utilisez la bonne combinaison d'options et de syntaxe.)la source
print -- {a,b,c}${^=:-d e f}
comme exemple principal, car quand asplit+glob
été désactivé par défaut danszsh
.Dans,
zsh
vous pouvez utiliser l' argument-C
nombre de colonnes spécifié pourprint
aimer:...obtenir...
... sans le
$IFS
fractionnement des éléments suivants:... impressions ...
... mais vous pouvez le faire à travers avant vers le bas comme ...
...ou...
la source
foobad foobaz barbad barbaz
d' obtenir de {foo, bar} {bad, baz} `?Vous pouvez mettre un nombre à la fin de chaque élément du deuxième ensemble, puis trier sur le dernier caractère:
Encore mieux serait d'ajouter des nombres après un séparateur (espace), de couper des champs, pas des caractères:
la source
Dans le
fish
shell, vous avez ce comportement par défaut, car l'expansion dansfish
s'effectue de droite à gauche :la source