先来看一下 空格在bash中的使用规则:
1.赋值运算时=号两边不能使用空格。
2.命令与选项之间需要空格。
3.管道两边的空格可有可无。
再来看一下各种由于空格导致错误的原因:
1)赋值运算时=号左边有空格
var ="abc"
产生的错误信息为:
var: command not found
这是由于bash在解释该条命令时,var会作为一个命令去在系统的PATH中去寻找。一旦无法找到var这个命令就回提示“找不到var这个命令”,那么后面的语句自然也无法执行。
2)赋值运算时=号右边有空格
var= "abc"
产生的错误信息为:
abc: command not found
这是因为在bash中有这么一条执行命令的方式:var=string command
命令command将得到变量var的值,那么“abc"则会作为一个command被bash解释,那么返回的信息当然是“找不到abc这个命令”。
3)赋值运算时=号左右都有空格。
这种情况与第一种情况相同。
4)命令之间没有使用空格。
常见的有如下几种情况:
【if与[之间没有空格】
if[ -n "abc" ];then echo ok;fi
错误原因:很多人认为[ ]在bash中只是一个判断布尔值的符号。其实[ ]在bash中的作用等同于test,它当然是一个命令。
那么if 是一个独立的命令,[ ]同样也是一个独立的命令。两个命令直接当然要有空格,否则像 if[这样的情况,bash只能理解为是一个整体,因而报错。
【[xxx]其中的参数的两端没有空格】
if ["abc" = "abc" ];then echo ok;fi
错误原因:同样的 bash根本无法理解["abc"是个什么东西。要牢记 [ ]不仅仅是一个符号,而是一个命令。
【[ "abc"="cba" ]其中的参数之间没有空格】
if [ "abc"="abc" ];then echo ok;fi
错误原因:
=两边有空格,是表达式,判断=两边的值是否相等,返回一个bool值.
=两边缺少空格,bash则会将"abc"="cba"看做一个整体,它始终返回为真。
至于管道,虽然|两边空格可有可无,但为了美观,一般还是保留两边的空格的。