GNU/Linux >> Linux Esercitazione >  >> Linux

Trasformazione automatica delle nuove righe nell'assegnazione delle variabili Shell?

Questo è il risultato di uno dei miei commenti a questa domanda sull'uso di bc nello scripting della shell. bc inserisce interruzioni di riga in grandi numeri, ad esempio:

> num=$(echo 6^6^3 | bc)
> echo $num
12041208676482351082020900568572834033367326934574532243581212211450\ 20555710636789704085475234591191603986789604949502079328192358826561\ 895781636115334656050057189523456

Ma nota che non sono realmente interruzioni di riga nella variabile, o almeno non ci sono se viene utilizzata senza virgolette. Ad esempio, scherzando con più pipe nel compito, ad esempio:

num=$(echo 6^6^3 | bc | perl -pne 's/\\\n//g')

Mi sono reso conto che mentre c'è davvero un \n nel bc output, controllando echo $num > tmp.txt con hexdump mostra il \n (ASCII 10) è diventato definitivamente uno spazio (ASCII 32) nell'assegnazione delle variabili.

O almeno, nell'output di $num > senza virgolette . Perché?

Come fa notare fedorqui, se usi le virgolette:echo "$num" , ottieni di nuovo le nuove righe. Ciò è evidente esaminando la differenza tra echo $num > tmp.1 e echo "$num" > tmp.2 con dump esadecimale; il primo contiene \ (spazio barra rovesciata) mentre il successivo contiene \\n (barra rovesciata nuova riga).

Risposta accettata:

echo inserisce uno spazio tra ogni due argomenti. La shell considera la nuova riga in $num solo un separatore di parole (proprio come lo spazio).

lines="a
b
c"
set -x
echo $lines   # several arguments to echo
echo "$lines" # one argument to echo

Vedi questa risposta (dallo stesso OP) per una spiegazione più dettagliata.


Linux
  1. Legge i valori in una variabile di shell da una pipe

  2. Shell - Scrive contenuti variabili in un file

  3. Tutte le nuove righe vengono rimosse quando si salva l'output cat in una variabile

  4. Ambito variabile per gli script e le funzioni della shell bash nello script

  5. Itera sulla variabile $ PATH usando lo script di shell

Memorizzazione dell'output del comando nella variabile Shell?

È Shell Portable eseguire un comando sulla stessa riga dopo l'assegnazione di variabili?

Aggiornamento automatico?

Spiegazione del comando di esportazione in Linux

Che cos'è Subshell in Linux?

Shell =Controlla se la variabile inizia con #