Wie liest man eine Datei in eine Variable in der Shell?

Ich möchte eine Datei lesen und sie in einer Variablen speichern, aber ich muss die Variable behalten und nicht nur die Datei ausdrucken. Wie kann ich das machen? Ich habe dieses Skript geschrieben, aber es ist nicht ganz das, was ich brauchte:

#!/bin/sh
while read LINE  
do  
  echo $LINE  
done <$1  
echo 11111-----------  
echo $LINE  

In meinem Skript kann ich den Dateinamen als Parameter angeben, d.h. wenn die Datei z.B. "aaaa" enthält, würde es dies ausgeben:

aaaa
11111-----

Aber das gibt nur die Datei auf dem Bildschirm aus, und ich möchte sie in einer Variablen speichern! Gibt es eine einfache Möglichkeit, dies zu tun?

Lösung

In plattformübergreifenden, kleinsten gemeinsamen Nenner sh Sie verwenden:

#!/bin/sh
value=`cat config.txt`
echo "$value"

In bash oder zsh, um eine ganze Datei in eine Variable zu lesen, ohne cat aufzurufen:


#!/bin/bash
value=$(
Kommentare (15)

Wenn Sie die gesamte Datei in eine Variable einlesen wollen:

#!/bin/bash
value=`cat sources.xml`
echo $value

Wenn Sie die Datei Zeile für Zeile lesen wollen:

while read line; do    
    echo $line    
done < file.txt
Kommentare (4)

zwei wichtige Fallstricke

die in den anderen Antworten bisher ignoriert wurden:

  1. Entfernung von Zeilenumbrüchen aus der Befehlserweiterung
  2. Entfernung des NUL-Zeichens

Entfernen von Zeilenumbrüchen aus der Befehlserweiterung

Dies ist ein Problem für den:

value="$(cat config.txt)"

Lösungen, aber nicht für Lösungen, die auf "Lesen" basieren.

Bei der Befehlsexpansion werden nachstehende Zeilenumbrüche entfernt:

S="$(printf "a\n")"
printf "$S" | od -tx1

Gibt aus:

0000000 61
0000001

Dies bricht die naive Methode des Lesens aus Dateien:


FILE="$(mktemp)"
printf "a\n\n" > "$FILE"
S="$(
Kommentare (8)