KSH解决整个文件的环境变量

时间:2014-04-21 23:34:59

标签: environment-variables output ksh

我有一个包含环境变量的文件名列表。我想逐行读取文件,然后将变量设置为读入行,但是将envirnment变量转换为适当的环境变量。到目前为止,这是我的脚本:

#!/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

1 个答案:

答案 0 :(得分:2)

  1. 您声明了一个变量,但没有美元符号:

    $var=value     # no
    var=value      # yes
    
  2. 由于下划线是变量名称的有效字符,因此ksh正在尝试扩展名为ENVVAR3_bar的变量:您需要使用大括号将变量名称与周围文本分开:

    foo3$ENVVAR3_bar.csv      # no
    foo3${ENVVAR3}_bar.csv    # yes