扒一扒shell中的怪异语法

shell脚本给运维工做带了很大的方便,但其中也有一些怪异的语法规则,老是容易给人挖坑。程序员

  • 对空格的使用
    • 在if else语法中,if与后面的表达式必须有空格隔开,这对于熟悉其余语言的程序员来讲很容易将其忽略,致使面对语法错误的提示百思不得其解。
    • if [ expression ]
      then
         Statement(s) to be executed if expression is true
      fi
    • 在表达多个元素时,元素之间是采用空格个来分隔,好比定义数组时:
      • array_name=(value0 value1 value2 value3)
      • 又好比做为函数参数时:
      • printf "%d %s\n" 1 "abc"。
      • 为何不能使用逗号呢?来对比一下看看哪一种看起来更舒服:
        • array_name=(value0,value1,value2,value3),
        • printf "%d %s\n",1,"abc
    • 另外一个更怪异的地方是,在定义变量时,变量名和等号之间不能有空格,这也太奇葩了!
      • myNum =10 (错误)
  • shell中另外一个怪异的地方是作一样一件事能够有好几种表达方式:
    • 好比变量引用,能够是$myvar,也能够是${myvar},从避免代码看起来混乱的角度看,应该强制使用大括号将变量与其余字符进行分隔比较合理。能够对比下下面两种状况,哪种看起来更舒服,更容易区分哪里是变量哪里是字符串字面量。
      • echo "there is "$num1" person and "$num2" room"
      • echo "there is ${num1} person and ${num2} room"
    • 好比循环,能够用for,也能够用while,还有until,实际上until用处并不大,通常都能用while代替掉,为了一个不多用到的状况设计一个专门的语法是不太值得的。
    • 又好比函数定义中,如是不加return语句,就返回最后一条命令运行结果,这实在没有必要,这种节省return的状况反而容易把人给绕晕,看代码的人得分析一番才搞得清这个函数要返回的倒底是什么。
    • 还好比特殊变量:$@和$*,都表示全部参数,虽然有一些小小区别,可是为了这一点小区别设计两个语法实在有点小题大做了!
相关文章
相关标签/搜索