18 BASH – Variabili e stringhe

4 Marzo, 2024 (15:49) | BASH, Linux | By: sargonsei

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"