我正在使用BASH 3.2。我可以執行的命令行:BASH:模式匹配不起作用
$ build_number=23332
$ if [[ $build_number != +([0-9]) ]]
> then
> echo "Bad Build Number ($build_number). No CPU time for you!"
> else
> echo "Build Number ($build_number) is numeric"
> fi
Build Number (2332) is numeric"
如果我改變build_number to
23332a`,這將返回:
Bad Build Number (23332a). No CPU time for you!
現在,我會盡力把這個變成我的shell腳本:
#! /bin/bash
...
#
# Set options
#
while getopts :hu:j:b:p: option
do
case $option in
p) promotion_name="$OPTARG";;
u) jenkins_url="$OPTARG";;
j) job_name="$OPTARG";;
b) build_number="$OPTARG"
if [[ $build_number != +([0-9]) ]]
then
error "Build Number must be numeric"
fi
;;
h) printf "\n$USAGE\n"
exit 0;;
*) error "Invalid Argument";;
esac
done
shift $(($OPTIND - 1))
當我嘗試執行我的計劃,我得到以下錯誤:
$ ./promotion.sh -b 238d -jasdad
./promotion.sh: line 55: syntax error in conditional expression: unexpected token `('
./promotion.sh: line 55: syntax error near `+(['
./promotion.sh: line 55: ` if [[ $build_number != +([0-9]) ]]'
那麼,我做錯了什麼?
我的默認交互式外殼是Kornshell,我第一次測試它,它工作正常。然後,意識到我應該在BASH中運行它,我啓動了一個BASH shell並且它仍然有效。然而,作爲一個Kornshell人員,我在''.bashrc'文件中設置了shell選項'extglob'和'lithist'。這就是爲什麼它在命令行上工作,而不是在我的shell腳本中。 –