我有一个包含环境变量的文件名列表。我想逐行读取文件,然后将变量设置为读入行,但是将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
答案 0 :(得分:2)
您声明了一个变量,但没有美元符号:
$var=value # no
var=value # yes
由于下划线是变量名称的有效字符,因此ksh正在尝试扩展名为ENVVAR3_bar
的变量:您需要使用大括号将变量名称与周围文本分开:
foo3$ENVVAR3_bar.csv # no
foo3${ENVVAR3}_bar.csv # yes