• 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
  • 相关阅读:
    mybatis中crud操作范例
    Guava----Function
    Spring mvc Controller接口
    简单的验证码识别(opecv)
    Mat转换为QImage
    将多张图片无缝拼接方法
    模式识别---图像二值化
    双边过滤算法
    C++对于大型图片的加载缩放尝试
    ijg库解码超大型jpeg图片
  • 原文地址:https://www.cnblogs.com/litifeng/p/6896248.html
Copyright © 2020-2023  润新知