我正在写(我的第一个)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}
这很疯狂,我想我会放弃并使用旧的普通复制粘贴,因为这会更快。
答案 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
使用dos2unix
或fromdos
转换为unix格式。