我有一个Bash脚本,它传递模式并切换到grep。
#!/bin/bash
foo() {
grep $@ *.txt
}
foo $@
当然,myscript SomeText
有效但myscript "Text1 Text2"
没有。有什么方法可以在将参数从脚本传递到foo()然后从foo()传递给grep时保留引号?
注意,我不能简单地使用eval并在grep之前包装整个$ @,因为它也可以包含开关,所以我需要保留从命令行传递的原始引用。
感谢。
答案 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 "$@"
这是$@
和$*
之间的差异。