4

bash スクリプトのパラメーターを正規表現と一致させようとしています

mykill.bash [-l] [-s SIGNO] pattern1 pattern2

私はこの表現を使用しています:

regex = ^(-l)?(\s-s\s[0-9]+)?(\s[a-zA-Z0-9]+){1,2}$ <br>
if [[ $@ =~ $regex ]]; then echo 'cool'

たとえば./mykill.bash -l -s 33 abc gives $@='-l -s 33 abc'、 debuggex.com テストに合格します (画像を参照してください。ただし、私のスクリプトでは機能しません)。

ここにリンクの説明を入力

4

3 に答える 3

3

\s一部のバージョンの bash は、他の言語/フレーバーで慣れている方法をキャッチしません。キャッチされないバージョンの 1 つ\sは、GNU bash, version 3.2.48(1)-release-(x86_64-apple-darwin12).

=また、変数に値を代入するときは、スペースを入れてはいけません。

Ken-YNがあなたの投稿へのコメントで言ったように、あなたのパターンにはいくつかの問題もあります。以下のコードで修正しました。

問題がある場合、これはそれを行う必要\sがあります:

#!/bin/bash
re='^(-l\ )?(-s\ [0-9]+\ )?([a-zA-Z0-9]+)(\ [a-zA-Z0-9]+)?$'
if [[ $@ =~ $re ]]; then
    echo 'cool'
fi

私のようにスペースをエスケープする必要はありませんが、この方法の方が読みやすいと思います。

于 2013-09-13T06:59:07.903 に答える
0

As per your input, this will match

if [[ $@ =~ -l\ -s\ [0-9]+\ [a-zA-Z]+ ]]
then 
      echo 'cool'
else
      echo 'check again' 
fi
于 2013-09-13T06:49:39.530 に答える