BSD grepを使用すると `--exclude-dir "_book"`は機能しますが、 `--exclude-dir={_book}`が失敗するのはなぜですか?

BSD grepを使用すると `--exclude-dir

私のgrepバージョンは次のgrep (BSD grep) 2.5.1-FreeBSDとおりです。私のオペレーティングシステムは次のとおりです。OSX 10.13.3 (17D47)

gitbookリポジトリがあり、_bookgrepを使用するときに無視したい一時ディレクトリがあります。

私はそれを使用したときにディレクトリgrep -Fnrl mysql ./ --exclude-dir={_book}を除外しませんでした_book。結果は次のとおりです。

...
.//UTILITIES/my_utils/shell_scripts/get_several_days_mysql_data_log.sh
.//_book/search_jieba_index.dat
.//_book/LANGUAGES/awk/awk_magic.html

しかし、このコマンドはgrep -Fnrl mysql ./ --exclude-dir "_book"私が期待した結果を提供します。結果は次のとおりです。

...
.//UTILITIES/my_utils/shell_scripts/get_several_days_mysql_data_log.sh

私はstackoverflowを検索して最初のコマンドスタイルに言及し、3つの賛成票を得た質問を見つけたので、場合によってはうまくいくようです。
質問リンクは次のとおりです。複数のディレクトリを除外するには、--exclude-dirフラグでgrepを使用します。

なぜこれが起こるのですか?
成功を除外するために最初のコマンド方法を使用するにはどうすればよいですか_book

ベストアンサー1

その記事はbashの利点を活用しています。支柱の拡張:

$ printf "%s\n" --exclude-dir={a,b,c}
--exclude-dir=a
--exclude-dir=b
--exclude-dir=c

ただし、要素が1つしかない場合は、中括弧拡張は適用されず、中括弧はそのまま残ります。

$ printf "%s\n" --exclude-dir={a}
--exclude-dir={a}

中括弧の拡張は、grepではなくbash(および他のいくつかのシェル)の機能なので、grepは名前付きの名前を除外するように指示するようです{_book}

おすすめ記事