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使其可以正常工作?
答案 0 :(得分:1)
在您的示例中,{java,xml}
参数在被脚本击中之前由外壳程序将expanded分为两个参数java xml
(这使$1
只是java
,并将参数编号弄乱,其中$2
为xml
,$3
为keyword
)。
在我匆忙而未经测试的第一次回答中,我忘记了一个关键的要点:大括号扩展先于变量扩展,所以在替换变量$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 .