GNU/Linux >> Linux Esercitazione >  >> Linux

Come valutare le stringhe come numeri in Bash

Come tutto è file in Linux, tutto è stringa in bash.

Sì! Tecnicamente, non ci sono tipi di dati in Bash. In sostanza, le variabili Bash sono solo stringhe di caratteri.

E questo crea un problema quando si tenta di eseguire operazioni aritmetiche in bash. I numeri che provi ad aggiungere ti danno risultati strani.

[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6

Per convertire le stringhe in numeri interi in bash, avvolgili in $((X)). In questo modo:

$((string))

Se la stringa ha un numero identificabile, verrà trattata come un numero. L'esempio che ho mostrato sopra può essere corretto come:

[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
Tutto ciò che fai all'interno di $((...)) è considerato un'operazione aritmetica.

Vediamo un po' più in dettaglio la conversione delle stringhe in numeri in modo da poter utilizzare i calcoli aritmetici in bash.

Conversione di variabili stringa in numeri

Dichiariamo alcuni "numeri" che sono fondamentalmente stringhe di caratteri.

[email protected]:~$ a=11
[email protected]:~$ b=3

Puoi controllare il numero assegnato:

[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3

Proviamo ora ad aggiungere entrambi i numeri e memorizzare il valore in una terza variabile c :

[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3

Come puoi vedere nell'output sopra, c viene anche trattato come una stringa.

Per fare in modo che l'aggiunta abbia successo, devi "convertirla" attraverso un'espansione aritmetica:

[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14

Tieni presente che c è ancora in realtà una stringa, fino a quando non utilizzerai nuovamente la stessa espansione aritmetica per un'altra operazione di cui parlerò tra poco.

[email protected]:~$ c=$((5))

Quanto sopra equivale a:

[email protected]:~$ c=5

Usiamo una terza variabile d per un'altra operazione:

[email protected]:~$ d=10

Tutte queste dichiarazioni implicite sono ancora stringhe. È lo stesso di come avevo definito a e b prima.

Ora per la seconda operazione:

[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16

Nell'espressione precedente, viene calcolato prima il prodotto di b e c e infine seguono l'addizione e la sottrazione.

Come accennato in precedenza, qualsiasi cosa tu faccia tra $((...)) è considerata un'operazione aritmetica.

Tutta questa conversione funziona per numeri interi. Non funzionerà con virgola mobile, ovvero numeri con punti decimali.

Prova a mescolare stringhe e numeri reali

Mescolare stringhe e numeri interi è ancora più sicuro che mescolare coca cola e menta. Tuttavia, produce uno strano risultato.

[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3

Funzionerà solo quando ci sono numeri (come stringa). Se è pura stringa di caratteri, non verrà magicamente convertita in alcuni numeri. Invece, viene ignorato come puoi vedere nell'esempio sopra.

Metodo alternativo:usa expr

Puoi anche usare expr strumento per eseguire la valutazione, ma tieni presente che non è una procedura Bash "nativa", poiché è necessario disporre di coreutils installato (per impostazione predefinita su Ubuntu) come pacchetto separato.

[email protected]:~$ expr $a + $b \* $c - $d
16

Spero che questo breve tutorial ti abbia aiutato a valutare le stringhe bash come numeri. Se hai domande o suggerimenti, sentiti libero di lasciare un commento qui sotto.


Linux
  1. Come scrivere un ciclo in Bash

  2. Come eseguire il debug di uno script Bash?

  3. Come rilevare Bash>=4.0?

  4. In che modo Bash valuterà il seguente codice?

  5. BASH:come eseguire operazioni aritmetiche sui numeri in una pipe

Bash concatena le stringhe

Come confrontare le stringhe in Bash

Come usare bash if -z e if -n per testare le stringhe in Linux

Come visualizzare la cronologia di Bash senza numeri di riga

Come eseguire uno script Bash

Differenza tra virgolette singole e doppie in Bash Shell