一重引用符を使用するときにgrepが期待した結果を返さないのはなぜですか?

一重引用符を使用するときにgrepが期待した結果を返さないのはなぜですか?

次の内容を含むファイルがあります。

sh-4.2$ cat file1
example of multiple
pattern
this is an
example of multipole
sorry multiple
pattern matching
using grep
so the example is the
file itself
-example
-multiple
-bye
tata
!

上記のファイルから "-example"を検索すると、grepコマンドは目的の出力を提供しません。パターンに「-」が含まれている場合は、-eオプションを使用する必要があることがわかります。

私が使用した最初の例では、-はい引用符なしで直接:

sh-4.2$ grep -example file1
example of multiple
example of multipole
so the example is the
-example

-はい一重引用符を使用する:

sh-4.2$ grep '-example' file1
example of multiple
example of multipole
so the example is the
-example

-はい二重引用符とエスケープ文字を含む

sh-4.2$ grep "\-example" file1
-example
sh-4.2$

ベストアンサー1

検索パターンに「-」が含まれており、検索パターンに「-」が含まれている場合は、その-eフラグを使用する必要があります。そのフラグを使用しないため、-eシェルは「パターン」を引数(およびパラメータ)として解釈します。以下で見ることができます:

$ grep "-foo" file1
grep: oo: No such file or directory

拡張すると、コードは引数と「xample」引数を使用して実行するgrep "-example" file1シェルを示します。grep-e

これは、同様のアプローチを試みたときに経験したのと同じ問題です。rm -my-silly-file-nameうまくいかなかったので、同様のアプローチを使用する必要がありますrm ./-my-silly-file-name。別の解決策はrm -- -my-silly-file-name次のとおりです。

$ grep -- "-example" < file1
-example

「--」は、シェルに続くすべてを伝えます。いいえ議論。

または、次のように「\」を使用して「-」をエスケープすることもできます。

grep "\-example" file1

この記事では、参照の詳細の一部を詳しく説明します。:関連部分はシェルで解釈する必要があるパラメータと逆引用符コマンドは二重引用符で囲みます。二重引用符を使用すると、内容はシェルで解釈されます。

おすすめ記事