背景

问题发生在jenkins持续集成的打包脚本上,我们需要将数据库脚本按照不同条件抽取出来,放到不同的文件夹下。

问题分析

要实现这个需求,其中自然少不了条件判断,其中有一段代码:

if [  -d "$tempPath/$VERSION/$VERSION_standard" ]; then

它的逻辑是,如果存在标准(standard)的脚本目录,则需要做一段逻辑。你能看出这个语句有什么问题吗?
是的,它的字符串拼接的方式错了,就是这句$VERSION_standard。它本来的含义是在变量$VERSION后面拼接一个字符串,如V1.0.0_standard,而写成$VERSION_standard意味着要找名称为VERSION_standard的变量,结果是为空的。

我们通过Linux黑窗口来测试一下:
在这里插入图片描述
我们可以看到$VERSION_standard输出的结果是空的,并没有得到V1.0.0_standard的结果,而采用${VERSION}_standard的形式,得到了我们想要的结果。

这段错误代码导致的结果是,不论是否存在${VERSION}_standard文件夹,只要存在上一级文件夹$tempPath/$VERSION,if里面的判断就为真,这就产生了错误的结果

总结一下字符串拼接常用方案

就以上面说的$VERSION变量与_standard字符串拼接的例子说明。
1、采用${VERSION}_standard的形式,通过{}限定变量的范围。
2、采用$VERSION"_standard"的形式,通过“”限定字符串的范围。
在这里插入图片描述
3、采用$VERSION$type的形式,定义一个type变量,值为_standard,将两个变量连接,两个变量之间不要有空格
在这里插入图片描述
4、融会贯通之后,当然,你也可以采用$VERSION"_"$type进行字符串拼接了,自由组合。
在这里插入图片描述
你学会了吗?

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐