- +=运算符
数组追加: $ arr=(1 2 3) $ arr+=(4 5) 自然地我们会想到如果一个变量是数字,是否也可以用+=作运算呢? $ i=1 $ i+=1 但是,运行后你会发现i的结果并不为2,而是11,这里bash并不认为i是一个整数,而是作为字符串。 这时可以通过declare声明一个变量为整数,上面的问题就解决了: $ declare -i int=1 $ int+=1 $ echo $int 2
- Here document不为人知的用法
一般的here document的用法是这样的: $ cat b.sh cat<<EOF hello, $USER EOF $ sh b.sh hello, kodango here document中的变量都是会被展开的,那能不能不展开呢?答案是可以的,将EOF用引号括起来就可以: $ cat b.sh cat<<"EOF" hello, $USER EOF $ sh b.sh hello, $USER 一般here document用得最多的是在帮助函数(help\usage)函数里面,因为在这里我们要写一大段的脚本用法。 如果你有强迫症(比如我),有时候使用here document的时候会很不爽,因为here document里面每行首部的空格都会被保留,而如果要顶格写,在缩进的地方又会有点打乱结构,例如: $ cat b.sh # part 1 if :; then cat << EOF hello, $USER EOF fi # part 2 if :; then if :; then cat << EOF hello, $USER EOF fi fi 上面的脚本执行的结果为: $ sh b.sh hello, kodango # part 1 result hello, kodango # part 2 result 有没有办法既兼顾到缩进又能不保留行首空格呢? 答案也是肯定的,只不过语法又要稍稍变一下,现在在<<的后面加一个短横,这个用法下,行首的Tab字符都会被忽略: $ cat b.sh if :; then cat <<- EOF hello, $USER EOF fi $ sh b.sh hello, kodango fi 一定要是Tab键哦,空格也是不可以的,在vim里面还要注意如果设置了smarttab选项,行首插入的Tab键会替换成相应个数的空格(这里可以按ctrl+v tab插入实际的空格)。 关于这一节的内容,可以进一步参考Redirection#here_documents [Bash Hackers Wiki]。
- 善用let或者(())命令做算术运算
如何对一个数字做++运算,可能你会这样用: a=1 a=`expr a + 1` 为何不用你熟悉的: a=1 let a++ let a+=2
- SHELL调试
1. 通过set -o命令来查看当前 shell 的选项配置。 2. set -x 这个可以打开 shell 的调试开关,调试 shell 脚本非常有用.