1

私は、経験の浅い Linux ユーザーがいくつかのコマンドを使用できるように、小さな bash スクリプトを作成しています。if ステートメントのパターン マッチングを行うときに中かっこを使用していることです。

regex="[A-Za-z0-9]/{5/}"
if [[ $2 =~ $regex ]]
then
  num=$2
else
  echo "Invalid entry"
  exit 1
fi

これは、正確に 5 文字の AZ、az、または 0-9 をキャプチャする必要があります。

エスケープの有無にかかわらず、何度も、多くのバリエーション、多くの引用符を試しました...何も機能していないようです:

+ regex='[A-Fa-f0-9]/{5/}'
+ [[ abcd1 =~ [A-Za-z0-9]/{5/} ]]
+ echo 'Invalid entry'

私が見逃しているアイデアはありますか?

GNU bash, version 3.2.39(1)-release
4

3 に答える 3

2

たぶん問題はここにあります:

regex="[A-Za-z0-9]/{5/}"

次のようにする必要があります。

regex="[A-Za-z0-9]\{5\}"

(バックスラッシュを見てください)

于 2013-01-29T14:19:46.997 に答える
1

試してみてください

regex="[A-Za-z0-9]{5}"

編集:あなたが試すことができる別の変更は

if [[ "$2" =~ $regex ]]

Edit2:$2長さが5文字かどうかを判断したいだけの場合は、次のようなものを試すことができます

if [ ${#2} = 5]
于 2011-08-11T15:40:37.567 に答える
1

うーん、bash バージョン「GNU bash、バージョン 4.1.10(4)-release」で動作します

$ regexp="[[:alnum:]]{5}"
$ set -- "" abcde
$ [[ "$2" =~ $regexp ]] && echo y || echo n
y
$ set -- "" foo
$ [[ "$2" =~ $regexp ]] && echo y || echo n
n

右側を引用してはならないことに注意してください。

$ set -- "" abcde
$ [[ "$2" =~ "$regexp" ]] && echo y || echo n
n

これには実際には正規表現は必要ありません。

$ glob="[[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]][[:alnum:]]"
$ set -- "" abcde
$ [[ "$2" == $glob ]] && echo y || echo n
y
$ set -- "" foo
$ [[ "$2" == $glob ]] && echo y || echo n
n
于 2011-08-11T16:09:59.970 に答える