我的编辑器一直用sublime text,最近在写个小脚本,常用的shell的自动不全,可是在if then 语句及elif 语句不全的时候会自动不全成如下:
if [[ condition ]]; then
#statements
fi
[[ 虽然提供过了高级特性模式匹配,可以定义正则表达式等,但是这就造成了兼容性问题,[[ 是bash 和ksh的特性,当用sh 执行的时候呢假如sh test.sh [[ 处就会报错如下:
test1.sh: 7: test1.sh: [[: not found
假如我用./test.sh 运行呢? 那肯定可以执行咯,因为已经明确指出了shebang为/bin/bash咯
用bash test.sh 更不用说了肯定没问题。
假如我写的脚本有些人用sh来运行的话那就出问题了。所以为了兼容这个小小的问题,又可以快速使用sublime的补全,我就去更改下sublime的shell script 包,更改下面两个文件:
if-…-then-(if).sublime-snippet 和 elif-..-(elif).sublime-snippet
将这两个文件中的如下字段做以修改:
修改前: <content><![CDATA[if ${2:[[ ${1:condition} ]]}; then
${0:#statements}
fi]]></content>修改后: <content><![CDATA[if ${2:[ ${1:condition} ]}; then
${0:#statements}
fi]]></content>
当然,elif修改也是照猫画虎。这样就可以做到一个小小的兼容和高效的工作。