bash:变量未按预期扩展

时间:2014-11-24 12:32:19

标签: bash shell

如果我在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

1 个答案:

答案 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+kMENTER