扒一扒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的情况反而容易把人给绕晕,看代码的人得分析一番才搞得清这个函数要返回的倒底是什么。
    • 还比如特殊变量:$@和$*,都表示所有参数,虽然有一些小小区别,但是为了这一点小区别设计两个语法实在有点小题大作了!

转载于:https://my.oschina.net/u/150599/blog/885312

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值