シェルスクリプト `grep` 実行は対話型シェルのようには機能しません。

シェルスクリプト `grep` 実行は対話型シェルのようには機能しません。

使用できないまたは削除できない環境を処理する必要がある場合、ackこのコマンドはC ++プロジェクトを介して文字列を見つけるために関連ファイルのみを制限しようとします。

 grep pattern --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)

これで作業が完了します。今より多くの商品を提供する目的は、それをシェルスクリプトに入れることです。名前がと仮定しますwrapped_grep。内容は次のとおりですwrapped_grep

#!/usr/bin/env bash

shopt -s extglob # enable advanced pattern matching
grep $1 --color -- /project/path/**/*.*([chCH]|cc|cxx|[ch]pp|py)

ただし、実行しようとすると、同等のwrapped_grep pattern直接grepクエリが期待どおりに一致するものを見つけても出力は提供されません。

直接grep呼び出しと同じ結果を提供するために、このスクリプトに欠けているものは何ですか?

答え1

シェルオプションは式の一部をextglob有効にしますが、その部分にはオプションが必要です*([chCH]|cc|cxx|[ch]pp|py)**/globstar

          globstar
                  If set, the pattern ** used in a pathname expansion con‐
                  text  will  match all files and zero or more directories
                  and subdirectories.  If the pattern is followed by a  /,
                  only directories and subdirectories match.

だからあなたは必要になるかもしれません

shopt -s extglob globstar

関連情報