KSH, разрешающий переменные среды для всего файла

У меня есть список имен файлов с переменными среды в них. Я хотел бы прочитать файл построчно, а затем установить переменную для чтения в строке, но перевести переменную среды в соответствующую переменную среды. Вот мой скрипт на данный момент:

#!/bin/ksh

. /test/currentEnv.sh

while read line
do
        echo $line
done < $1

если мой исходный файл:

foo1$ENVVAR1.csv 
foo2$ENVVAR2.csv
foo3$ENVVAR3.csv

и мои переменные среды в currentEnv.sh

$ENVVAR1=hello;     export ENVVAR1     
$ENVVAR2=world;     export ENVVAR2
$ENVVAR3=test;      export ENVVAR3

Я хотел бы, чтобы результаты сценария были

foo1hello.csv
foo2world.csv
foo3test.csv

в настоящее время он просто выгружает исходный файл:

foo1$ENVVAR1.csv 
foo2$ENVVAR2.csv
foo3$ENVVAR3.csv

Редактировать

Мне удалось разрешить большинство моих файлов, используя: #!/bin/ksh

. /test/currentEnv.sh

while read line
do
        eval echo $line
done < $1

однако некоторые из моих переменных находятся в середине строки, например:

foo3$ENVVAR3_bar.csv

кажется, что он ищет переменную env $ENVVAR3_bar и не находит ее. Мне нужно это для вывода:

foo3test_bar.csv

person user3558332    schedule 21.04.2014    source источник


Ответы (1)


  1. Вы объявляете переменную без знака доллара:

    $var=value     # no
    var=value      # yes
    
  2. Поскольку подчеркивание является допустимым символом для имени переменной, ksh пытается расширить переменную с именем ENVVAR3_bar: вам нужно использовать фигурные скобки, чтобы отделить имя переменной от окружающего текста:

    foo3$ENVVAR3_bar.csv      # no
    foo3${ENVVAR3}_bar.csv    # yes
    
person glenn jackman    schedule 22.04.2014
comment
Да, фигурные скобки сделали это. Я объявляю переменные без $, просто неправильно написал. Спасибо за отзыв. - person user3558332; 22.04.2014