Utilizzo della variabile $IFS
La variabile shell speciale $IFS è usata in bash per dividere una stringa in parole. La variabile $IFS è denominata Internal Field Separator (IFS) che viene utilizzata per assegnare il delimitatore specifico per la divisione della stringa. I confini delle parole sono identificati in bash da $IFS. Lo spazio vuoto è il valore delimitatore predefinito per questa variabile. Qualsiasi altro valore come ' ', ' ', '-' ecc. Può essere utilizzato come delimitatore. Dopo aver assegnato il valore nella variabile $IFS, il valore della stringa può essere letto da due opzioni. Questi sono '-r' e '-a'. L'opzione '-r' viene utilizzata per leggere la barra rovesciata () come un carattere anziché come carattere di escape e l'opzione '-a' viene utilizzata per memorizzare le parole suddivise in una variabile di matrice. La stringa può essere suddivisa senza utilizzare la variabile $IFS in bash. Negli esempi seguenti vengono mostrati diversi modi per dividere i dati delle stringhe (con $IFS o senza $IFS).
Esempio 1: stringa divisa in base a
Per impostazione predefinita, il valore della stringa è diviso per spazi vuoti. Crea un file chiamato 'split1.sh' e aggiungi il seguente codice. Qui, la variabile $text viene utilizzata per assegnare un valore stringa. La variabile shell $IFS viene utilizzata per assegnare il carattere che verrà utilizzato per dividere i dati della stringa. Lo spazio viene utilizzato in questo script come separatore. L'opzione '-a' viene utilizzata con il comando di lettura per memorizzare i dati suddivisi in una variabile di array denominata $strarr. Il ciclo 'for' viene utilizzato per leggere ogni elemento dell'array, $strarr.
split1.sh
#!/bin/bash
#Definisci il valore della stringa
testo='Benvenuto in LinuxHint'
# Imposta lo spazio come delimitatore
IFS=''
#Leggi le parole divise in un array basato sul delimitatore di spazio
leggere -astrarra<<< '$testo'
#Conta le parole totali
buttato fuori 'Ci sono${#strarr[*]}parole nel testo.'
# Stampa ogni valore dell'array usando il ciclo
perorein '${strarr[@]}';
fare
printf '$ ore '
fatto
Produzione:
Esegui lo script.
$bashsplit1.sh
Il seguente output apparirà dopo aver eseguito lo script.
Esempio-2: stringa divisa in base a un carattere particolare
Qualsiasi carattere specifico può essere utilizzato come separatore per dividere il valore della stringa. Crea un file chiamato split2.sh e aggiungere il seguente codice. Qui, il nome del libro, il nome dell'autore e il valore del prezzo vengono presi aggiungendo la virgola (,) come stringa di input. Successivamente, il valore della stringa viene suddiviso e memorizzato in un array basato sul valore della variabile shell, $IFS. Ogni valore degli elementi dell'array viene stampato dal valore dell'indice.
split2.sh
#!/bin/bash#Leggi il valore della stringa
buttato fuori 'Inserisci il nome del libro, il nome dell'autore e il prezzo separando la virgola. '
leggeretesto
# Imposta la virgola come delimitatore
IFS=','
#Leggi le parole divise in un array basato sul delimitatore di virgola
leggere -astrarra<<< '$testo'
#Stampa le parole divise
buttato fuori 'Nome del libro:${strarr[0] }'
buttato fuori 'Nome dell'autore :${strarr[1]}'
buttato fuori 'Prezzo :${strarr[2]}'
Produzione:
Esegui lo script.
$bashsplit2.shIl seguente output apparirà dopo aver eseguito lo script.
Esempio 3: dividere la stringa senza la variabile $IFS
Questo esempio mostra come è possibile dividere il valore della stringa senza utilizzare $IFS in bash. Crea un file chiamato ' split3.sh ' e aggiungere il seguente codice. Secondo lo script, un valore di testo con i due punti (:) deve prendere come input per la scissione. Qui, il comando 'readarray' con l'opzione -d viene utilizzato per dividere i dati della stringa. L'opzione '-d' viene utilizzata per definire il carattere separatore nel comando come $IFS. Successivamente, viene utilizzato il ciclo 'for' per stampare gli elementi dell'array.
split3.sh
#!/bin/bash#Leggi la stringa principale
buttato fuori 'Inserisci la stringa con i due punti (:) per dividere'
leggereprincipale
#Dividi la stringa in base al delimitatore, ':'
readarray-D:-Tstrarra<<< '$mainstr'
printf ' '
# Stampa ogni valore dell'array usando loop
per (( n=0; n< ${#strarr[*]}; n++))
fare
buttato fuori '${strarr[n]}'
fatto
Produzione:
Esegui lo script.
$bashsplit3.shIl seguente output apparirà dopo aver eseguito lo script.
Esempio-4: dividere la stringa con un delimitatore a più caratteri
Il valore della stringa è suddiviso da un singolo delimitatore di carattere in tutti gli esempi precedenti. In questo esempio viene mostrato come dividere la stringa utilizzando un delimitatore multi-carattere. Crea un file chiamato Times split4.sh e aggiungere il seguente codice. Qui, la variabile $text viene utilizzata per memorizzare i dati di una stringa. La variabile $delimiter viene utilizzata per assegnare un dato a più caratteri che viene utilizzato come delimitatore nelle istruzioni successive. La variabile $myarray viene utilizzata per memorizzare ogni dato suddiviso come elemento dell'array. Infine, tutti i dati suddivisi vengono stampati utilizzando il ciclo 'for'.
split4.sh
#!/bin/bash#Definisci la stringa da dividere
testo='learnHTMLlearnPHPlearnMySQLlearnJavascript'
#Definisci delimitatore multi-carattere
delimitatore='imparare'
#Concatena il delimitatore con la stringa principale
corda=$testo$delimitatore
#Dividi il testo in base al delimitatore
mia matrice=()
mentre [[ $stringa ]];fare
miaarray+=( '${stringa%%'$delimitatore'*}' )
corda=${stringa#*'$delimitatore'}
fatto
#Stampa le parole dopo la divisione
pervalorein ${miarray[@]}
fare
buttato fuori -n '$valore'
fatto
printf ' '
Produzione:
Esegui lo script.
$bashsplit4.shIl seguente output apparirà dopo aver eseguito lo script.
Conclusione:
I dati della stringa devono essere suddivisi per scopi di programmazione diversi. In questo tutorial sono mostrati vari modi per suddividere i dati delle stringhe in bash. Spero che, dopo aver praticato gli esempi sopra, i lettori saranno in grado di dividere qualsiasi dato di stringa in base alle loro esigenze.
Per maggiori informazioni guarda il video !