0

BASH 3.2 を使用しています。コマンドラインから次を実行できます。

$ 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"

23332aを変更build_number toすると、次のように返されます。

Bad Build Number (23332a). No CPU time for you!

ここで、これをシェル スクリプトに入れてみます。

#! /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]) ]]'

それで、私は何を間違っていますか?

4

2 に答える 2

2

拡張グロビングを有効にする必要があります。

shopt -s extglob
于 2013-07-25T16:13:02.967 に答える
0

最も明白なことは、プラスが先行する文字がパターンに一致するかどうかをチェックすることです。ここでは、先行する文字がなく、その後にプラスを置きます

于 2013-07-25T16:14:49.340 に答える