1、变量定义等号两边不能有空格

#!/bin/bash
myvar=3 #正确
myvar = 3; #等号边多了空格,是错误的!很迥异

1.1、还是空格,这次是不能没有

#!/bin/shmyVar="OFF"if [   $myVar = 'OFF'    ];then#这里[]中括起来的内容两端必须有空格, if [$myVar = 'OFF'] 是不能正常工作的。也很迥异吧#注意 if 和 [ 之间也是有空格的!        echo "works"else        echo "Not works"fi

2、双引号和单引号

testvar=5
myvar='Haha$test' #shell会解释$test
myvar2="Haha$test" #shell会解释$test
echo $myvar $myvar2 #输出:Haha$test Haha5

双引号中的字符如果有变量,shell会尝试解释它,单引号中不会。所以,如果字符串中没有要解释的变量尽量使用单引号,据说速度会快些。

这个到不算很迥异,还有很多其他的语言也都有这样的约定。

3、奇怪的算术运算

shell中算术运算需要使用$((和))将算术运算括起来

$(( $myvar + 12 )) #这个非常迥异

4、case语句

case "${x##*.}" in      gz)            gzunpack ${SROOT}/${x}            ;;      bz2)            bz2unpack ${SROOT}/${x}            ;;      *)            echo "Archive format not recognized."            exit            ;;esac           #这个比较迥异 "esac"、";;"、"bz2)"

5、函数中的变量作用范围

#!/usr/bin/env bashmyvar="hello"myfunc() {     myvar="one two three"     for x in $myvar     do         echo $x     done}myfuncecho $myvar $x输出:onetwothreeone two three three  #函数myfunc中的变量,在函数之外仍然存在。#你可以通过关键字 local 限制变量只在函数中有效果 #这个比较迥异

还有更迥异的吗?

参考文献:

  1. http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-1/index.html
  2. http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-2/index.html
  3. http://www.ibm.com/developerworks/cn/linux/shell/bash/bash-3/index.html
  4. http://www.linuxsir.org/main/?q=node/135
  5. BASH Programming − Introduction HOW−TO