2016-07-01 4 views
0

Я хотел бы иметь содержимое нескольких переменных в файле как один столбец. Если я, например, установить свои переменные:Перечислить содержимое переменной в отдельный файл (unix)

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

Для Grep всех переменных, которые начинаются с FILE и затем рядом я:

set | grep FILE[0-9] > LIST

содержимое, однако, только имена переменных и не содержание, то есть:

head LIST

FILE1 
FILE2 
FILE3 

Я хотел бы иметь:

1.txt 
2.txt 
3.txt 

На связанный с этим вопрос: Я использую set для печати переменных. Есть ли команда, которая только печатает переменные, установленные в текущем сеансе?

ответ

1

Вы можете использовать cut для этого.

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

где использованные опции

-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 

Использование awk, установка ИФС в "=" и печать 2-й столбец из согласованного файла.

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

Для печати всех name=value пар в вашем файле, используйте следующий скрипт. Предположим, что ваш файл имеет только эти пары имя-значение, присутствующие

#!/bin/bash 

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

и напечатать значения, установленные в setVariables как

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

спасибо! Это работает, однако, не с 'compgen -A'. вместо этого следует использовать этот 'set', который будет печатать переменные и их содержимое. Спасибо! Кроме того, есть ли лучший способ распечатать переменные? Я хотел бы просто напечатать все переменные, которые были установлены в текущем сеансе терминала или скриптом, который я запускаю. – Vaxin

+0

@ Vaxin: см. Мое обновление, чтобы сохранить все установленные значения в файле. – Inian

0

Чтобы получить содержимое переменной ФАЙЛА1 можно просто Eval строку «$ FILE1" .

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

Не забудьте '^ $' вокруг вашего регулярного выражения. В противном случае даже что-то вроде «HISTFILE1» будет сопоставлено.

Смежные вопросы