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
,并弄乱你的参数编号,$2
xml
,$3
被keyword
(。
在我匆忙且未经测试的第一次尝试回答中,我忘记了一个关键点:大括号扩展先行,在变量扩展之前,所以当你的变量$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 .