2016-07-01 13 views
0

Ich möchte den Inhalt mehrerer Variablen in einer Datei als eine Spalte haben. Wenn ich zum Beispiel meine Variablen gesetzt:variable Inhalte in eine separate Datei (UNIX) auflisten

FILE1=1.txt 
FILE2=2.txt 
FILE3=3.txt 

Um alle Variablen grep, die mit FILE beginnen und werden von einer Reihe folgte ich tun:

set | grep FILE[0-9] > LIST

Die Inhalte sind jedoch nur die Variablennamen und nicht den Inhalt, dh:

head LIST

FILE1 
FILE2 
FILE3 

ich haben möchte:

1.txt 
2.txt 
3.txt 

In einer verwandten Frage: Ich verwende set die Variablen zu drucken. Gibt es einen Befehl, der nur die in der aktuellen Sitzung gesetzten Variablen ausgibt?

Antwort

1

Sie können für dieses verwenden.

grep "FILE*" file | cut -d"=" -f2 
1.txt 
2.txt 
3.txt 

, wo die verwendeten Optionen

-d, --delimiter=DELIM 
     use DELIM instead of TAB for field delimiter 
-f, --fields=LIST 
     select only these fields; also print any line that contains no delimiter character, unless the -s option is specified 

Mit awk sind, von der angepassten Datei, um den IFS als "=" und Druck die zweite Spalte Einstellung.

awk -F"=" '/FILE*/{print $2}' file 
1.txt 
2.txt 
3.txt 

Um alle name=value Paare in der Datei, verwenden Sie das folgende Skript zu drucken. Angenommen, Ihre Datei hat nur diese Namen-Wert-Paare vorhanden

#!/bin/bash 

setVariables=() 
while IFS="=" read -r varName varValue; 
do 
setVariables+=("$varValue") 
done <file 

und die Werte drucken gesetzt in der setVariables als

for value in "${setVariables[@]}" 
do 
    echo "$value" 
done 
+0

danke! Das funktioniert aber nicht mit 'compgen -A'. stattdessen sollte 'set' verwendet werden, was die Variablen und deren Inhalt ausgibt. Vielen Dank! Gibt es eine bessere Möglichkeit, die Variablen zu drucken? Ich möchte nur alle Variablen drucken, die in der aktuellen Terminal-Sitzung oder von dem Skript festgelegt wurden, das ich ausführe. – Vaxin

+0

@Vaxin: Verweisen Sie mein Update, um alle festgelegten Werte in der Datei zu speichern. – Inian

0

Um den Inhalt der Variablen FILE1 erhalten Sie könnten nur die Zeichenfolge „eval $ FILE1 ".

list=$(compgen -A variable | grep '^FILE[0-9]$') 
for line in $list 
do 
    eval echo '$'$line >> LIST 
done 

Vergessen Sie nicht das '^ $' um Ihren Regex. Sonst würde sogar etwas wie "HISTFILE1" passen.

Verwandte Themen