18 BASH – Variabili e stringhe
18 BASH – Variabili e stringhe
Per BASH, una Variabile è un’insieme di caratteri alfanumerici associato ad un “contenitore”; L’interprete BASH, quando incontra la variabile, si comporta come se avesse incontrato ciò che è contenuto nel contenitore a cui la variabile è associata. Per “richiamare”, una variabile, occorre anteporre il simbolo ${ e posporre il suffisso } all’insieme di caratteri alfanumerici che la contraddistingue. Le parentesi graffe sono obbligatorie solo nel caso in cui la loro assenza generi ambiguità.
Vediamo qualche esempio:
:~> A1="Autostrada "; echo "La variabile 'A1' contiene $A1" # Imposta e mostra il contenuto della variabile A1 La variabile 'A1' contiene Autostrada :~> A1="Autostrada "; echo 'La variabile "A1" contiene $A1' # Imposta il contenuto della variabile A1 ma non lo mostra La variabile "A1" contiene $A1 :~> A1="Autostrada ";B1=${A1}A1; echo $B1 # Imposta univocamente il contenuto delle variabili A1 e B1, poi mostra il contenuto di B1 Autostrada A1 :~$ A1="Autostrada ";B1=$A1A1; echo $B1 # Imposta ambiguamente il contenuto delle variabili A1 e B1, poi mostra il contenuto di B1 :~>
18.1 Variabili contenenti un comando
Una variabile può contenere anche un comando, che può essere eseguito o mostrato. Per esempio:
cd ~; AA='ls'; cd ..; $AA # Mette la strimga 'ls' nella variabile AA; esegue il comando contenuto nella variabile AA opensuse cd ~; AA='ls'; cd ..; echo $AA # Mette la strimga 'ls' nella variabile AA; visualizza il contenuto della variabile AA ls :~> A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1 $ A1="cat $(find ./iSo/ -name *.cfg)"; eval $A1|grep 'menuentry "Try' -A0 menuentry "Try or Install Xubuntu" { -- menuentry "Try or Install Xubuntu" { $
18.2 Variabili contenenti l’output di un comando
Una variabile può contenere anche l’output di comando, per mostrarlo in un secondo tempo. Per esempio:
cd ~; AA=`ls`; cd ..; echo $AA # Mette l'output del comando `ls` nella variabile AA; visualizza il contenuto della variabile AA bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video cd ~; AA=$(ls); echo $AA # Mette l’output del comando 'ls' nella variabile AA; visualizza il contenuto della variabile AA bin Documenti Immagini Modelli Musica Pubblici Scaricati Scrivania Video :~> Si noti che ['] non è [`] e che [-] non è [~]; infatti, in Linux: ['] si ottiene digitando il tasto ['] (apostrofo); [`] si ottiene digitando la combinazione di tasti [AltGr]+['] (apostrofo); [-] si ottiene digitando il tasto [-] (segno meno); [~] si ottiene digitando la combinazione di tasti [AltGr]+[ì] (i accentata).
18.3 – Manipolazione delle stringhe
VAR1=`mediainfo videoIN.mp4 | egrep Wi` # Mette all'interno della variabile VAR1 l'output di un comando
VAR2=`expr index "$VAR1" :` # Mette in VAR2 il numero corrispondente alla posizione del carattere ":" all'interno di VAR1
VAR3=${#VAR1} # Mette in VAR3 il numero di caratteri contenuto in VAR1
VAR4=${VAR1:2} # Mette in VAR4 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR5=${VAR1:2:3} # Mette in VAR5 3 caratteri consecutivi contenuti in VAR1 a cominciare dal 2°
VAR6=${VAR1:(-6)} # Mette in VAR6 tutti i caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR7=${VAR1:(-6):4} # Mette in VAR7 4 caratteri consecutivi contenuti in VAR1 a cominciare dal 6° contando dalla fine
VAR8=${VAR1::2} # Mette in VAR8 tutti i caratteri consecutivi contenuti in VAR1 che precedono il 2° contando dall'inizio
VAR9=${VAR1::(-6)} # Mette in VAR9 tutti i caratteri consecutivi contenuti in VAR1 che seguono il 6° contando dalla fine
VAR10=${VAR1/" "/""} # Mette in VAR10 il contenuto di VAR1 priva del primo spazio vuoto
VAR11=${VAR1//" "/""} # Mette in VAR11 il contenuto di VAR1 priva di tutti gli spazi vuoti
VAR12=${VAR1/i/yY} # Mette in VAR12 il contenuto di VAR1 sostituendo il primo carattere "i" con "yY"
VAR13=${VAR1//i/yY} # Mette in VAR13 il contenuto di VAR1 sostituendo tutti i caratteri "i" con "yY"