如何在bash参数中保留带引号的字符串
我有一个Bash脚本,它传递模式并切换到grep如何在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命令看起来不完整,您
#!/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,带引号和不带引号的区别如所示