3

パターンを渡してgrepに切り替えるBashスクリプトがあります。

#!/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 に答える