【问题标题】:Variable is not being set properly变量设置不正确
【发布时间】: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 看起来好吗?
  • 很好的测试!使用该命令进行测试表明有问题。

标签: linux sh


【解决方案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

【讨论】:

    猜你喜欢
    • 2018-05-17
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-24
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多