一、引言
最近在工作中开始尝试着使用 Shell 编写一些脚本来替代人力做一些繁琐而又简单的工作。
其中,我遇到这么一个问题,代码类似如下:
tmp_val=$(grep xxx tmp.txt)
if [ -n $tmp_val ]
then echo yes
else echo no
fi
原意是想要从 tmp.txt 文件中查找 xxx 字符串,将 grep 的结果赋值给 tmp_val,如果存在的话,tmp_val 必然有值,就打印一个 yes,否则打印一个 no。
看似很简单的样子,但是当我执行上述代码后却发现,不管 tmp.txt 中到底有没有 xxx 字符串,最后都会打印出来一个 yes,这是为什么呢?
二、解决
经过我网上搜索相关资料发现:
当你 tmp_val 的值为空的时候,
if [ -n $tmp_val ]
就相当于if [ -n ]
,而-n
在这里被识别为一个字符串,它不为空,必然判断永远都是真值
可见这确实是一个比较容易写错的地方,那么怎么修复这个问题呢?
tmp_val=$(grep xxx tmp.txt)
if [ -n "$tmp_val" ]
then echo yes
else echo no
fi
我们只需要在 if [ -n ]
中的字符串变量外部增加一个双引号 "$tmp_val"
将变量括起来即可,这样即使变量为空,也不会出现 -n
判断的永远真值的问题了。
Shell 编程学习仍在路上,希望本篇博客能够给你带来一些帮助~~~
To be Stronger:)
来源:oschina
链接:https://my.oschina.net/u/4363726/blog/4284178