在bash shell 脚本中总是需要对已经执行命令作错误检查, 以便进行下一步处理.
而错误处理一般类似linux native C app或perl脚本中 "or die"的语法style. 故稍作整理记录之:
#!/bin/bash
ERROR=$'\e'[31\;47m"Error: "
EEND=$'\e'[0m'\n'
function die() {
[ "$1" ] && echo -e ${ERROR}$*$EEND
# will uncomment below without test
#exit 1;
}
# like perl: false or die
which ]
[ $? -eq 0 ] || { die 1. no "]";}
# fail then die
which ]
(($?)) && { die 2. no "]";}
which ]
(($?)) && { which type; die no ];} || { echo find;}
which ]
(($?)) && { which type; } || { echo find;} # Pitfall: go on to the second brace block
PS: ] 不是bash保留字, 更不是metachar元字符, 而[ 作为命令第一个word时是test的同义词, 且都是builtin命令:
~/tmp$ type test
test is a shell builtin
~/tmp$ type [
[ is a shell builtin