W zsh (i innych powłokach), jeśli dołączę taki argument jak (na przykład):
{a,b,c}{d,e,f}
Rozszerzenie nawiasów zamienia to w:
ad ae af bd be bf cd ce cf
Dla moich celów kolejność argumentów jest ważna i potrzebuję nawiasów klamrowych do rozwijania od prawej do lewej zamiast od lewej do prawej. To znaczy, chcę, aby rozszerzenie było:
ad bd cd ae be ce af bf cf
Czy istnieje sposób kontrolowania kolejności, w której wiele zestawów nawiasów klamrowych jest rozszerzanych? Szukam czegoś, co zadziała w każdej sytuacji, nie tylko z tymi argumentami.
zsh
brace-expansion
Michał Mrożek
źródło
źródło
{a,b,c}{d,e,f}
nie jest zbyt pomocneOdpowiedzi:
Można połączyć interpretację parametrów z interpretacją nawiasu.
Jeśli nie chcesz definiować
foo
osobno (co wydaje się prawdopodobne), możesz użyć następujących opcji:Jeśli masz
rcexpandparam
ustawioną opcję, nie potrzebujesz tej opcji^
w żadnym z przykładów, aby włączyć to zachowanie.(Uwaga: podczas testowania miałem również
shwordsplit
opcję ustawioną. Jeśli jej nie masz, spróbuj na przykładecho {a,b,c}${^=:-d e f}
. Morał z tej historii: prawie wszystko jest możliwezsh
, ale musisz upewnić się, że używasz właściwej połączenie opcji i składni.)źródło
print -- {a,b,c}${^=:-d e f}
jako głównego przykładu, ponieważ kiedysplit+glob
domyślnie był wyłączony wzsh
.W
zsh
można użyć-C
podanej liczby argumentów kolumny, abyprint
polubić:... żeby dostać ...
... bez
$IFS
podziału na następujące elementy:... drukuje ...
... ale możesz to zrobić wcześniej niż ...
...lub...
źródło
foobad foobaz barbad barbaz
z {foo, bar} {bad, baz} `?Możesz umieścić liczbę na końcu każdego elementu drugiego zestawu, a następnie posortować według ostatniego znaku:
Jeszcze lepiej byłoby dodać liczby po pewnym separatorze (spacji), wyciąć pola, a nie znaki:
źródło
W
fish
powłoce takie zachowanie jest domyślnie, ponieważ interpretacja wfish
jest wykonywana od prawej do lewej :źródło