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

时间:2012-09-24 11:40:02

标签: bash parameter-passing double-quotes variable-expansion

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

#!/bin/bash

foo() {
    grep $@ *.txt
}

foo $@

当然,myscript SomeText有效但myscript "Text1 Text2"没有。有什么方法可以在将参数从脚本传递到foo()然后从foo()传递给grep时保留引号?

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

感谢。

2 个答案:

答案 0 :(得分:2)

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

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

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

foo "$@"

并称之为:

./myscript "Text1 Text2"

答案 1 :(得分:2)

只需引用$@

#!/bin/bash 

foo() { 
    grep "$@" 
} 

foo "$@" 

这是$@$*之间的差异。