目录

shell编程 空格的使用方法

目录

原文:https://www.jb51.net/article/60328.htm

空格,一个看不见的字符,很不起眼,也正由于不起眼,很多人经常忽略它,导致代码出错,却还找不着北。这里,我们来聊聊bash中空格的那点事

先了解下bash中什么时候该用空格,什么时候不该用。

  1. 等号赋值两边不能有空格
  2. 命令与选项之间需要空格
  3. 管道两边空格可有可无

我们来看看常见的问题

1. 赋值时等号两边或者只有左边多了空格

2. 赋值时等号左边没有空格,右边有空格(这种情况有点特别,你会发现两种情况)

3. 命令和选项之间必须有空格

这个似乎大家都明白,为何我还这么罗嗦呢?说到这里,不得不提一下一个非常特别的命令: [ 命令(你没看错,是[ ), 也就是test命令(当然bash中,这是个内置命令,但在这里不影响 我们的理解)。或许你会觉得[命令眼熟,没错,我保证你见过它,来看看下面的例子

1
2
3
4
5
$ if [ "abc" = "abc" ]; then echo 'they are the same'; fi
they are the same
$ type -a [
[ is a shell builtin
[ is '/bin/['

想起来了吧?[命令经常用到if判断中,当然也有人喜欢这么写

1
2
$ [ "abc" = "cba" ] || echo 'they are not the same'
they are not the same

[ 命令正名叫test命令,它们两者几乎一样,为什么不是完全一样?来看看这个

1
2
3
4
5
6
igi@gentoo ~ $ [ "abc" = "cba"
bash: [: missing `]‘
igi@gentoo ~ $ [ "abc" = "cba" ]
igi@gentoo ~ $ test "abc" = "cba" ]
bash: test: too many arguments
igi@gentoo ~ $ test "abc" = "cba"

清晰了吧,用[命令时,你必须给它个尾巴], 用test命令时,就不能加个尾巴。尾巴]是[最后一个参数,不可缺少的参数, 代表[命令的结束

扯了这么多,那到底这个和空格有毛关系?说这些,是先让大家明白: [在shell中是个命令,它左右必须有空格!]是[的最后不可缺少的参数,它两边也需要空格(虽然有些命令的参数能连一起,例如ps, 但[命令不行,它的参数之间必须有空格)。