变量连接在shell脚本中有奇怪的结果

时间:2013-02-21 12:08:53

标签: shell unix

我正在写(我的第一个)shell脚本,并且,为了灵活性,我想使用变量。以下是我根据搜索的不同示例编写的脚本的一部分:

#!/bin/sh
#
jar_path="/sbclocal/apps/blablabla"
echo $jar_path            # <- OK
echo ${jar_path}          # <- OK
echo $jar_path/jar        # <- /jarlocal/apps/blablabla
echo "$jar_path/jar"      # <- /jarlocal/apps/blablabla
echo ${jar_path}/jar      # <- /jarlocal/apps/blablabla
echo "${jar_path}/jar"    # <- /jarlocal/apps/blablabla

在最后一行,我希望得到“/ sbclocal / apps / blablabla / jar”,但我得到的是“/ jarlocal / apps / blablabla”!因此,代替连接,变量字符串的开始被替换为常量部分,我最终期望它!

jar参数内部还有更复杂的连接,它以我无法确定的方式被破坏,但我认为问题是相同的。

请问有什么问题?

UPD:编辑显示我尝试过的不同方法,都有相同的结果。

UPD:我也尝试了2个变量,奇怪的是第一个没有显示,就像它是空的,当我写的东西像

echo $var1$var2
echo ${var1}${var2}
echo ${var1}+${var2}

这很疯狂,我想我会放弃并使用旧的普通复制粘贴,因为这会更快。

1 个答案:

答案 0 :(得分:3)

长期作为评论......

$ ./var.sh 
/sbclocal/apps/blablabla
/sbclocal/apps/blablabla
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar
/sbclocal/apps/blablabla/jar

正如我所说,你的脚本对我来说非常合适。要检查的事情:

首先,将shebang更改为#!/bin/sh -x以启用调试并查看输出。

其次,运行file var.sh检查行结尾。预期结果应为:

$ file var.sh 
var.sh: POSIX shell script text executable

使用dos2unixfromdos转换为unix格式。