の結果| 変数内のgrep


0

これが私のスクリプトです:

    var=  $( $line | grep -Po '.*(?=.fr)' )
    echo $var

私はエラーがあり、それだけが表示されます:

 command not found

何が悪いのかご存知ですか?


また、誰かが疑問に思っている場合:これは非常に危険です。もし$line含まれてする場所rm -rf /、それは喜んであなたのシステムを破壊進行します。変数がユーザー/ファイル入力ではなくコンテンツのみを含む場合を除き、変数を実行しないでください。
ダニエルB

回答:


1

コマンド出力の変数へのパイピング

あなたのような少し簡単な例

$ a=$(echo abc | grep -o a)

$ echo $a
a

あなたの場合

$ line=asdf.fr

$ a=$(echo $line | grep -Po '.*(?=.fr)')

$ echo $a
asdf

$

行変数$ lineを展開し、実行するとエラーがstderrに書き込まれ、stdoutには何も書き込まれないため、行は失敗しました。異なる意味を持つすべての$は、少しおかしいです。ただし、($のプロンプトで)$$line<ENTER>実行した場合、コマンドが見つかりません。そして、もしあなたが$$line>a cat aそこに何も見えないなら そのため、grepには何のパイプもせず、何も見つかりません。そのため、コマンドのように実行するのではなく、行変数をエコーする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.