如何使用grep制作脚本--include多文件扩展名

时间:2018-07-09 03:16:28

标签: sh

myScript.sh:

grep --color -rn --include=*."$1" "$2" "$3"

命令:

./myScript.sh java keyword .              # it works!
./myScript.sh java,xml keyword .          # it doesn't..
./myScript.sh {java,xml} keyword .        # it doesn't..
./myScript.sh "{java,xml}" keyword .      # it doesn't..
./myScript.sh '{java,xml}' keyword .      # it doesn't..
grep -rn --include=*.{java,xml} keyword . # of course it works

如何命令? 或如何编辑myScript使其可以正常工作?

1 个答案:

答案 0 :(得分:1)

在您的示例中,{java,xml}参数在被脚本击中之前由外壳程序将expanded分为两个参数java xml(这使$1只是java ,并将参数编号弄乱,其中$2xml$3keyword)。

在我匆忙而未经测试的第一次回答中,我忘记了一个关键的要点:大括号扩展先于变量扩展,所以在替换变量$1时,大括号不会再次出现。 / p>

我发现解决这个问题的唯一方法是使用eval

eval grep --color -rn --include=*."$1" "$2" "$3"

并用

调用
./myScript.sh '{java,xml}' keyword .

或者,简化一下,

eval grep --color -rn --include=*."{$1}" "$2" "$3"

并致电

./myScript.sh java,xml keyword .