gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:11:36 24 4
gpt4 key购买 nike

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

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

最佳答案

渴望作为评论......

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

关于shell - 变量连接在shell脚本中有奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15001923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com