Di recente mi sono imbattuto in un problemino minchione: avere una sequenza di numeri in ordine inverso (cioè non da 1 a 20 ma da 20 a 1). Fin qui tutto easy.
Di solito se devo avere una sequenza uso appunto seq:
Che stampa appunto i numeri da 1 a 10.
Il problema è che il contrario non mi funzionava.
Nada.
Comunque, mentre cogitavo su questo e quello, e mentre mischiavo seq con sort mi sono imbattuto in una finezza bash che non conoscevo: la brace expansion.
Le brace expansion permettono di creare un output multiplo:
ZioPaperone GastonePaperone
In effetti anche:
20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
e
01 02 03 04 05 06 07 08 09 010 011 012 013 014 015 016 017 018 019 020
Inoltre si possono creare più concatenazioni:
A1x A1y A1z A2x A2y A2z A3x A3y A3z B1x B1y B1z B2x B2y B2z B3x B3y B3z C1x C1y C1z C2x C2y C2z C3x C3y C3z
Perchè possono risultare comode?
Beh, ad esempio, come spiegato nella pagina linkata, per questo:
/usr/lib/perl/5.10/Data/:
Dumper.pm
/usr/lib/perl5/Data/:
Alias.pm
o questo
mkdir: created directory ‘tmp/test’
mkdir: created directory ‘tmp/a’
mkdir: created directory ‘tmp/z’
sim@idrogeno:~$ rmdir -v tmp/{test,a,z}
rmdir: removing directory, ‘tmp/test’
rmdir: removing directory, ‘tmp/a’
rmdir: removing directory, ‘tmp/z’
Per la cronaca, seq “alla rovescia” non mi funzionava perchè non avevo letto bene il manuale.
La sintassi di seq è semplice:
$ seq [OPTION] LAST $ seq [OPTION] FIRST LAST $ seq [OPTION] FIRST INCREMENT LAST
Se FIRST o INCREMENT sono omessi, di default prendono il valore 1. Come si può capire facilmente, quindi seq 10 1 non ha senso. (Ah, fra le opzioni c’e’ –format che permette di stampare con dei placeholder stile printf.)
Quindi per avere quello che voglio è necessario usare:
Con sort:
# Attenzione, è diverso da seq 1 20 | sort -r
Con tac (il contrario di cat):
1 Comment to “Bash brace expansion”
Write a comment
You need tologin.
Altro materiale:
http://hanekomu.at/blog/dev/20100528-1012-bash_brace_expansion.html