1

egrep コマンドを置き換えるために使用するように、bash スクリプトを作成しようとしています。スクリプトに与えられたのとまったく同じ入力を取り、それを egrep にフィードできるようにしたいと考えています。すなわち

#!/bin/bash
PARAMS=$@
`egrep "$PARAMS"`

しかし、実行していることをエコーすると、次のように引用符が削除されていることに気付きました。

./customEgrep -nr "grep my ish" *

戻り値

egrep -nr grep my ish (展開された * からのファイル一覧)

egrep で直接使用できるように、入力を文字通り受け取る方法はありますか?

4

3 に答える 3

5

あなたはこれを求めている:

egrep "$@"

入力した引用符はスクリプトに渡されません。それらは単語の境界を決定するために使用されます。を使用すると"$@"、これらの単語の境界が保持さegrepれるため、直接実行した場合と同じ引数が得られます。echoただし、引数を指定すると、引用符は表示されません。

于 2013-01-26T15:59:38.543 に答える
2

$@引用されると特別です。試す:

value=$( egrep "$@" )

なぜあなたがバティックを使用して結果を無視しているのかはっきりしないので、$()構文を使用して値を割り当てました。

何らかの理由で後で使用するためにパラメーターを保存したい場合は、次のようなこともできます。

for i; do args="$args '$i'"; done  # Save the arguments
eval grep $args # Pass the arguments to grep without resetting $1,$2,...
eval set $args  # Restore the arguments
grep "$@"       # Use the restored arguments
于 2013-01-26T15:58:51.937 に答える
2

"特殊文字です。取得するにはエスケープ文字を使用する必要があります"

使用する

./customEgrep -nr "\"grep my ish\"" *

引数でパラメーター展開を行う必要がない場合は、一重引用符を使用して二重引用符をエスケープする必要がないようにすることができます。

./customerEgrep -nr '"grep my ish"' *
于 2013-01-26T15:45:08.643 に答える