web-dev-qa-db-ja.com

パターンにハイフン「-」が含まれている場合にgrepと一致

$ aと$ bを一致させるために次のコマンドを記述しましたが、値に「-」が含まれていると、エラーが発生します。どうすればそれを回避できますか?

# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified
11
yael

場所 --パターンの前:

echo "$a"  | grep -Fxc -- "$b"

--は、多くのコマンド/シェル組み込みのコマンド終了オプションを指定します。その後、残りの引数は位置引数として扱われます。

20
sebasth

@ sebasthの素晴らしい答えのほかに 、PATTERNを grep's -e オプションでパターンとして使用するように指定できます(ここでは<<<zshを使用しています) echoの代わりに-string演算子。移植性についてはprintf '%s\n' "$a"も参照してください)。

grep -Fxc -e "$b" <<<"$a"

または他のオプションの横にあるすべて。

grep -Fxce "$b" <<<"$a"

あなたの目標はバイトツーバイト文字列の等価比較なので、[コマンドを使用します代わりに。

if [ "$a" = "$b" ]

または、$a$bが含まれている場合は、[[...]] ksh構成を使用します。

if [[ $a == *"$b"* ]]

または、すべてのBourneのようなシェルでよりポータブルに:

case $a in
  *"$b"*) ...
esac
13
αғsнιη