2011-01-20 13 views

risposta

28

in molti di un milione di modi ...

più semplice è probabilmente

my_var=$(cat my_file) 

Se si utilizza bash e si desidera ottenere spiffy è possibile utilizzare mapfile di bash4, che mette un intero file in un variabile di matrice, una linea per cella

mapfile my_var < my_file 
+0

Da quando è la spaziatura prima e dopo '=' consentito nello scripting della shell? – orlp

+0

@nightcracker mi dispiace, brainfart, l'avevo già corretto prima che avessi visto il tuo commento – wich

+0

newline faranno provare la prima parte e falliranno con un errore di comando non trovato usare var = $ (cat file | tr -d '\ n') per rimuovere tutte le nuove righe, comprese quelle finali. – Jonathan

2
var="`cat /path/to/file`" 

Questo è il modo semplice. Fai attenzione alle nuove righe nel file.

var="`head -1 /path/to/file`" 

Questo otterrà solo la prima riga e non includerà mai una nuova riga.

+0

Ho un file "log" bloccato e '$ x =" \ "cat log \' "' restituisce '= 2: comando non trovato' –

+0

rimosso' $ 'oops .. – Puddingfox

+1

ew, backtick. .. – wich

0

credo che eliminerà newlines, ma qui è comunque:

variable=$(cat filename) 
+2

Spaccherà solo la riga finale finale. Se sembra che gli altri newline siano stati rimossi, è perché non stai citando la variabile in uscita. 'echo $ variabile' contro' echo "$ variabile" ' –

+0

@Dennis: Tutto qui. – orlp

0

Penso che il modo più semplice è qualcosa di simile

$ export myvar = `cat file` 
+4

Non è necessario esportare la variabile e gli spazi attorno al segno di uguale non funzioneranno. –

25

Beh, più semplice è probabilmente

var=$(< file) 

che non crea un nuovo processo.

+0

+1 per nessun nuovo processo – Puddingfox

+0

e un altro +1 per nessun nuovo processo – orlp

+1

Sembra che si sia interrotto sulla prima newline che incontra. – orlp

Problemi correlati