2012-09-24 79 views
3

我有一个Bash脚本,它传递模式并切换到grep。如何保留在bash参数中引用的字符串

#!/bin/bash 

foo() { 
    grep [email protected] *.txt 
} 

foo [email protected] 

,当然,myscript SomeText的作品,但myscript "Text1 Text2"没有。从脚本传递参数到foo()然后从foo()传递给grep时,是否有办法保留引号?

请注意,我不能简单地使用eval并在grep之前包装整个$ @,因为它也可以包含开关,所以我需要保留从命令行传递的原始引用。

谢谢。

回答

2

你的grep命令看起来不完整的,有你这样的脚本与报价参数:

#!/bin/bash 
set -x # for debug purpose only, comment out later 

foo() { 
    grep "[email protected]" *.txt 
} 

foo "[email protected]" 

,并调用它是这样的:

./myscript "Text1 Text2" 
+0

[参考](http://mywiki.wooledge.org/Quotes#Expand_argument_lists) – l0b0

+0

谢谢!我以为我已经测试过你的解决方案,但我可能忘了在其中一个电话中引用$ @。 – jackhab

+0

@jackhab,引用和未引用的区别在http://stackoverflow.com/a/12316565/7552 –

相关问题