【问题标题】:KSH Resolving Environmental Variables for an Entire FileKSH 为整个文件解析环境变量
【发布时间】:2014-04-22 08:29:01
【问题描述】:

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

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

这似乎在寻找一个环境变量 $ENVVAR3_bar 并没有找到它我需要这个来输出:

foo3test_bar.csv

【问题讨论】:

    标签: environment-variables output ksh


    【解决方案1】:
    1. 你声明一个变量没有美元符号:

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

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

    【讨论】:

    • 是的,大括号做到了。我确实声明了没有 $ 的变量,只是输入错误。感谢您的意见。
    猜你喜欢
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2020-04-04
    • 1970-01-01
    相关资源
    最近更新 更多