Bash中的空格

空格,一个看不见的字符,很不起眼,很多人经常忽略它,导致代码出错,却还找不着北。
先了解下bash中什么时候该用空格,什么时候不该用。

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

1、在[ ] 内部,如果只有一个值(那些因为缺少了空格而连一起的也算),不是空字符串就为真。所以在[ ] 之间的参数,也要两边有空格,而不能堆一起。

[root@noi ~]# if [ 0 ];then echo "equal";fi
equal
[root@noi ~]# if [ '1' ];then echo 'equal';fi
equal
[root@noi ~]# if [ '' ];then echo 'equal';else echo 'no equal';fi
no equal
[root@noi ~]# if [ ];then echo 'equal';else echo 'no equal';fi
no equal

极具迷惑性的代码,原因上面找:

#虽然错了,双等号前后缺少空格,却得到了正确答案。
[root@noi ~]# if [ 'abc'=='abc' ];then echo 'equal';else echo 'no equal';fi
equal
#这次就比较明了了,明显的不能,却说相等。
[root@noi ~]# if [ 'abc'=='bcd' ];then echo 'equal';else echo 'no equal';fi
equal

2、在bash里面,最好给变量加上双引号,防止运行出现意外。如果没有双引号,shell遇到未定义的变量或者在变量值中含有空格时,

将导致不可预料的错误。

[root@noi ~]# filename="my document"
#touch生成了2个文件my和document
[root@noi ~]# touch $filename
[root@noi ~]# ls
alias.set  a.out  default.pass  document  exists_folder  exists.txt  my  t  t1  t1.cpp  t.c  t.cpp  t.sh  wai.bat
#添加双引号后,没有错误了
[root@noi ~]# touch "$filename"
[root@noi ~]# ls
alias.set  a.out  default.pass  document  exists_folder  exists.txt  my  my document  t  t1  t1.cpp  t.c  t.cpp  t.sh  wai.bat
[root@noi ~]# ls $filename
document  my
[root@noi ~]# rm document my
rm: remove regular empty file `document'? y
rm: remove regular empty file `my'? y
[root@noi ~]# ls $filename
ls: cannot access my: No such file or directory
ls: cannot access document: No such file or directory
[root@noi ~]# ls -l "$filename"
-rw-r--r-- 1 root root 0 May 23 21:30 my document

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值