【发布时间】:2013-11-03 04:50:43
【问题描述】:
每当我尝试使用一个变量来构建另一个变量时,都会得到意想不到的结果。我已经缩小了一点,但可以对这里发生的事情提供一些帮助。我的本地脚本是这样做的:
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。
编辑
经过进一步的故障排除后,如果我将我的 any 变量从 $additional_vars 包含到路径名并将其放在我指定的任何内容之前,它会导致路径的该部分为空。所以它不仅仅是$CUR_TIME 变量。奇怪的是,回显 $additional_var 本身就很好。
我的 .properties 文件如下所示:
var1="something"
var2="something2"
var3="something3"
var3="ftp://something/another/$something_else"
var4="something.something"
如果我使用printf ${additional_vars} | hexdump -C 测试eval $additional_vars,我的输出结果是一个十六进制值,然后是|var1="something".|
【问题讨论】:
-
您的
${additional_var}iables 中有任何ANSI 转义序列吗?你能提供一个具体的、最小的例子,你可以发布变量的内容吗? -
@AdrianFrühwirth 不,我没有。 :-/
-
你的输出中真的只有一个斜线吗?
-
printf "${additional_var1}" | hexdump -C看起来好吗? -
很好的测试!使用该命令进行测试表明有问题。