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

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

$a を $b と一致させるために次のコマンドを作成しましたが、値に "-" が含まれるとエラーが発生します。これをどのように避けることができますか?

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

答え1

--パターンの前に配置:

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

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

答え2

@sebasthの素晴らしい答えに加えて、あなたはそれを使用することができますgrep's -e パターンのオプションとしてPATTERNを使用します(<<< zshここでは文字列演算子が代わりに使用されますecho。移植性も参照してくださいprintf '%s\n' "$a")。

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

または他のオプションに加えて。

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

あなたの目標はバイト単位なので文字列同等比較代わりにこのコマンドを使用してください[

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

または$a含まれている場合はksh設定を$b使用してください。[[...]]

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

あるいは、Bourneに似たすべてのシェルでより移植性に優れています。

case $a in
  *"$b"*) ...
esac

関連情報