如何在bash参数中保留带引号的字符串

如何在bash参数中保留带引号的字符串,bash,parameter-passing,double-quotes,variable-expansion,Bash,Parameter Passing,Double Quotes,Variable Expansion,我有一个Bash脚本,它传递模式并切换到grep #!/bin/bash foo() { grep $@ *.txt } foo $@ 当然,myscriptsometext可以工作,但是myscript“Text1 Text2”不能。在将参数从script传递到foo()然后从foo()传递到grep时,有没有办法保留引号 注意,我不能简单地使用eval并在grep之前包装整个$@,因为它还可以包含开关,所以我需要保持从命令行传递的原始引号 谢谢。您的grep命令看起来不完整,您

我有一个Bash脚本,它传递模式并切换到grep

#!/bin/bash

foo() {
    grep $@ *.txt
}

foo $@
当然,
myscriptsometext
可以工作,但是
myscript“Text1 Text2”
不能。在将参数从script传递到foo()然后从foo()传递到grep时,有没有办法保留引号

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


谢谢。

您的grep命令看起来不完整,您是否使用以下带有引号的参数的脚本:

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

foo() {
    grep "$@" *.txt
}

foo "$@"
这样称呼它:

./myscript "Text1 Text2"

只需引用
$@

#!/bin/bash 

foo() { 
    grep "$@" 
} 

foo "$@" 

这是
$@
$*
之间的区别,谢谢!我以为我已经测试了你的解决方案,但我可能忘了在其中一个调用中引用$。@jackhab,带引号和不带引号的区别如所示