4

我正在编写(我的第一个)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}

这太疯狂了,我想我会放弃并使用旧的普通复制粘贴,因为这样会快得多。

4

1 回答 1

4

太长了作为评论......

$ ./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

dos2unix使用或转换为 unix 格式fromdos

于 2013-02-21T12:53:41.750 回答