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



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

#!/bin/bash
foo() {
    grep $@ *.txt
}
foo $@

而且,当然,myscript SomeText有效,但myscript "Text1 Text2"不起作用。当将参数从脚本传递到 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 "$@" 

这是$@$*之间的区别。

相关内容

  • 没有找到相关文章

最新更新