如果我在shell脚本中设置变量然后尝试使用它来创建另一个变量,它似乎没有被正确替换。例如:
#!/bin/bash
X=/software/xxx
echo variable X = $X
echo path using variable: $X/yyy
echo path without variable: /software/xxx/yyy
输出:
variable X = /software/xxx
/yyy using variable: /software/xxx
path without variable: /software/xxx/yyy
我原本预计第二个输出行是:
path using variable: /software/xxx/yyy
我尝试了各种引号组合并使用$ {X},但都无济于事。
我是shell脚本的新手(来自Windows背景),所以我确信这里有一些非常简单的东西。
如果有人想知道我为什么要这样做,那么背景是我需要编写一个shell脚本,它接受一个相对路径名参数,确定它的绝对路径名,然后用一些jar文件设置CLASSPATH调用Java程序之前的目录:
#!/bin/bash
DIR=`readlink -fn $1`
export CLASSPATH=$DIR/x.jar:$DIR/y.jar
java progname
答案 0 :(得分:0)
您的X=
变量声明末尾有回车符(CR):
#!/bin/bash
X=/software/xxx^M
echo variable X = $X
echo path using variable: $X/yyy
(其中^M
代表一个特殊字符 - CR)。我假设你的编辑没有显示它。尝试使用vim
打开您的脚本。 Windows和Linux以不同的方式标记换行符(check wiki)。我想你正在使用一些Windows编辑器。
请阅读Bash Pitfalls webpage。我相信你可以从那里学到很多东西。
顺便说一句。在^M
输入vim
的一种方法:转到插入模式i
,然后按:CTRL+k
,M
,ENTER