变量未正确设置

时间:2013-06-10 13:30:59

标签: linux sh

每当我尝试使用一个变量来构建另一个变量时,我会得到意想不到的结果。我把它缩小了一点但是可以对这里发生的事情稍加帮助。我的本地脚本执行此操作:

CUR_TIME=$(date "+%Y%m%d_%HH%MM%SS")
CUR_TIME="build_"$CUR_TIME

这给了我想要的结果。但是,每当我尝试使用它来构建另一个变量或回显包含这个变量的东西时:

echo "/home/path/blah/$CUR_TIME"

我的结果只回显$CUR_TIME变量。这里发生了什么?

我的本​​地shell会话设置了$CUR_TIME变量,我通过ssh从远程服务器获取其他变量,如additional_vars=$(ssh user@server "cat variables.properties")

然后我做eval $addtional_vars$additional_vars包含相当多的变量,并且单独回显它们可以正常工作。

然后,我使用以下格式构建或回显新变量:

echo "/home/path/blah/$additional_var1/"

这回应得恰到好处,但如果我这样做(反向):

echo "/$additional_var1/home/path/blah"

我的结果只是/home/path/blah

修改

经过进一步的故障排除后,看起来如果我将{{1>}的{em>任何我的vars包含在路径名中,并将其放在我指定的任何内容之前,它会导致该部分路径被空值。所以它不仅仅是$additional_vars变量。奇怪的是,回复$CUR_TIME本身就很好。

我的.properties文件如下所示:

$additional_var

如果我使用var1="something" var2="something2" var3="something3" var3="ftp://something/another/$something_else" var4="something.something" 测试eval $additional_vars,我的输出结果为十六进制值,然后是printf ${additional_vars} | hexdump -C

1 个答案:

答案 0 :(得分:1)

我做的第一件事是:

additional_vars=$(ssh user@server "cat variables.properties")

如果我然后回显了这个变量,它会显示一个包含这些信息的多行变量:

var1="something"
var2="something2"
var3="something3"
var3="ftp://something/another/$something_else"
var4="something.something"

因此,当我运行eval $additional_vars时出现了一些奇怪的事情,这似乎是逐行进行并分配variables.properties中分配的变量,因为如果我然后回显变量那就没事了。但是使用它们给出了我在帖子中提到的有趣结果。

我最终这样做是为了让它发挥作用:

additional_vars=$(ssh user@server "cat variables.properties")

printf %s "$additional_vars" | while IFS= read -r line
do 
    eval $line
done

这解决了每一个问题,但我不确定为什么这会在其他方面起作用。

或者,也可以执行以下操作:

for line in $additional_vars
do
   eval $line
done