Di recente ho trovato alcune sintassi della Bash che mi sono tornate utili. Le elenco di seguito.
Trasformare in un array una lista restituita da un comando
Se si cattura in una variabile l'output di un comando che normalmente stamperebbe una lista a video, per esempio il comando "find", non si ottiene un array, bensì una stringa con gli elementi della lista separati da uno spazio. Per far diventare questo output un array di Bash è necessario circondare la "cattura" dell'output con un ulteriore paio di parentesi tonde:
sites=($(find /srv -maxdepth 3 -type f -name "node_server.cfg"))
Lunghezza di un array
Per ottenere tutti gli elementi di un array si utilizza il carattere "@" o "*" al posto dell'indice dell'array:
ports=${PORTLIST[@]}
Se, a questo punto, mettiamo un carattere "#" davanti al nome dell'array otterremo il conteggio degli elementi:
portlistlen=${#PORTLIST[@]}
Sintassi alternativa del ciclo "for"
Il ciclo "for" accetta, oltre alla solita sintassi "for a in ..." anche un'altra sintassi molto simile a quella del C:
for (( i=0; i<$portlistlen; i++ ))
do
...
done
Trasformare in un array una lista restituita da un comando
Se si cattura in una variabile l'output di un comando che normalmente stamperebbe una lista a video, per esempio il comando "find", non si ottiene un array, bensì una stringa con gli elementi della lista separati da uno spazio. Per far diventare questo output un array di Bash è necessario circondare la "cattura" dell'output con un ulteriore paio di parentesi tonde:
sites=($(find /srv -maxdepth 3 -type f -name "node_server.cfg"))
Lunghezza di un array
Per ottenere tutti gli elementi di un array si utilizza il carattere "@" o "*" al posto dell'indice dell'array:
ports=${PORTLIST[@]}
Se, a questo punto, mettiamo un carattere "#" davanti al nome dell'array otterremo il conteggio degli elementi:
portlistlen=${#PORTLIST[@]}
Sintassi alternativa del ciclo "for"
Il ciclo "for" accetta, oltre alla solita sintassi "for a in ..." anche un'altra sintassi molto simile a quella del C:
for (( i=0; i<$portlistlen; i++ ))
do
...
done
Commenti
Posta un commento