GNU/Linux >> Linux Esercitazione >  >> Linux

Legge i valori in una variabile di shell da una pipe

Questa è un'altra opzione

$ read test < <(echo hello world)

$ echo $test
hello world

se vuoi leggere molti dati e lavorare su ciascuna riga separatamente, puoi usare qualcosa del genere:

cat myFile | while read x ; do echo $x ; done

se vuoi dividere le righe in più parole puoi usare più variabili al posto di x in questo modo:

cat myFile | while read x y ; do echo $y $x ; done

in alternativa:

while read x y ; do echo $y $x ; done < myFile

Ma non appena inizi a voler fare qualcosa di veramente intelligente con questo genere di cose, è meglio che tu scelga un linguaggio di scripting come perl dove potresti provare qualcosa del genere:

perl -ane 'print "$F[0]\n"' < myFile

C'è una curva di apprendimento piuttosto ripida con perl (o immagino uno qualsiasi di questi linguaggi) ma lo troverai molto più facile a lungo termine se vuoi fare qualcosa di diverso dal più semplice degli script. Consiglierei Perl Cookbook e, ovviamente, The Perl Programming Language di Larry Wall et al.


Usa

IFS= read var << EOF
$(foo)
EOF

Puoi trucco read in accettazione da una pipe come questa:

echo "hello world" | { read test; echo test=$test; }

o anche scrivere una funzione come questa:

read_from_pipe() { read "[email protected]" <&0; }

Ma non ha senso:i tuoi incarichi variabili potrebbero non durare! Una pipeline può generare una subshell, in cui l'ambiente viene ereditato per valore, non per riferimento. Ecco perché read non si preoccupa dell'input da una pipe:non è definito.

Cordiali saluti, http://www.etalabs.net/sh_tricks.html è un'elegante raccolta del cruft necessario per combattere le stranezze e le incompatibilità delle bourne shell, sh.


Linux
  1. Il ciclo ignora la modifica della variabile da una subshell in background?

  2. Come inserire i dati Csv in una tabella Sqlite tramite un tubo di shell?

  3. Linux bash:assegnazione di più variabili

  4. Come ottenere il nome dell'attuale ramo git in una variabile in uno script di shell?

  5. Pipe string to GNU Date for conversion - come farlo leggere da stdin?

Che cos'è Subshell in Linux?

Come fare eco in un file

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

Chiarimento relativo al comportamento dello script della shell insieme alla pipe

bash + leggi variabili e valori dal file tramite lo script bash

Shell =Controlla se la variabile inizia con #