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



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 以便它可以工作?

在你的例子中,{java,xml}参数在到达脚本之前被你的 shell 扩展为两个参数java xml(这使得你的$1只是java,并弄乱你的参数编号,$2xml$3keyword(。

在我匆忙且未经测试的第一次尝试回答中,我忘记了一个关键点:大括号扩展先行,在变量扩展之前,所以当你的变量$1被替换时,大括号不会再看一眼。

我发现解决这个问题的唯一方法是使用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 .

最新更新