zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    mysql复合索引的优点和注意事项
    linux服务器时间更新
    mysql慢日志
    Proftpd linux服务器FTP安装配置
    js 截取字符串
    在工信部注销网站备案
    史玉柱传奇
    css white-space属性
    获取微信授权
    禁用ipv6
  • 原文地址:https://www.cnblogs.com/litifeng/p/6896248.html
Copyright © 2011-2022 走看看