bash中的空格

先来看一下 空格在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"看做一个整体,它始终返回为真。


至于管道,虽然|两边空格可有可无,但为了美观,一般还是保留两边的空格的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章