3

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

#!/bin/bash

foo() {
    grep $@ *.txt
}

foo $@

而且,当然,myscript SomeText有效但myscript "Text1 Text2"无效。将参数从脚本传递给 foo() 然后从 foo() 传递给 grep 时,有没有办法保留引号?

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

谢谢。

4

2 回答 2

2

您的 grep 命令看起来不完整,您是否使用带引号的参数编写这样的脚本:

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

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

foo "$@"

并这样称呼它:

./myscript "Text1 Text2"
于 2012-09-24T11:46:29.277 回答
2

简单引用$@

#!/bin/bash 

foo() { 
    grep "$@" 
} 

foo "$@" 

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

于 2012-09-24T11:50:20.493 回答