每当我尝试使用一个变量来构建另一个变量时,我都会得到意想不到的结果。我已经缩小了一点范围,但可以对这里发生的事情提供一些帮助。我的本地脚本执行此操作:
CUR_TIME=$(date "+%Y%m%d_%HH%MM%SS")
CUR_TIME="build_"$CUR_TIME
这给了我想要的结果。但是,每当我尝试使用它来构建另一个变量或回显包含此变量的内容时:
echo "/home/path/blah/$CUR_TIME"
我的结果只回显了$CUR_TIME
变量。这里发生了什么?
该$CUR_TIME
变量是在我的本地 shell 会话中设置的,我通过 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
。
编辑
经过进一步的故障排除后,如果我将我的任何变量 from包含$additional_vars
到路径名并将其放在我指定的任何内容之前,它会导致路径的该部分为空。所以这不仅仅是$CUR_TIME
变量。奇怪的是,回显 an$additional_var
本身就很好。
我的 .properties 文件如下所示:
var1="something"
var2="something2"
var3="something3"
var3="ftp://something/another/$something_else"
var4="something.something"
如果我eval $additional_vars
使用 进行测试printf ${additional_vars} | hexdump -C
,我的输出会产生一个十六进制值,然后|var1="something".|