2013-04-16 18 views
11

私はラインでこのエラーUbuntuのリダイレクタ "<<<"?

Syntax error: redirection unexpected

を取得しています:

if grep -q "^127.0.0." <<< "$RESULT" 

私はUbuntuのでこれを実行するにはどうすればよいですか?

+2

リダイレクトは単一の左括弧ですか? < –

+0

コードが左から右に移動します。しばらくしていますが、正しいことを覚えていれば、それをリダイレクトするために '' "RESULT" 'です。 –

+1

このコマンドで何を達成したいですか? '$ RESULT'の値は何ですか? –

答えて

17
if grep -q "^127.0.0." <<< "$RESULT" 
then 
    echo IF-THEN 
fi 

は、Bash固有のものです。別のシェル互換シェルを使用している場合は、次のコマンドを試してみてください。

if echo "$RESULT" | grep -q "^127.0.0." 
then 
    echo IF-THEN 
fi 
+1

解決済み、ありがとう! – jmginer

+0

ありがとう@Halこれも私の問題を解決しました.. –

2

ブロック場合、私はあなたを完了した場合には、Ubuntuの上で私の作品:

if grep -q "^127.0.0." <<< "$RESULT"; then echo ""; fi 
+0

<<<は何ですか?これは私にとって新しいことかもしれません。 –

+3

[here-strings](http://linux.die.net/abs-guide/x15683.html)にリダイレクトされます。 –

+0

http://stackoverflow.com/questions/2462317/bash-syntax-error-redirection-unexpected – jmginer

21

<<<はbashの固有のリダイレクト演算子です。 documentationは、それを"Here Document"の亜種である "Here String"と呼んでいます。

3.6.7 Here Strings

A variant of here documents, the format is:

<<< word

The word is expanded and supplied to the command on its standard input.

簡単な例:

$ cat <<< hello 
hello 

あなたがエラーを取得している場合、それはあなたがbashの以外のシェルを使用してコマンドを実行している可能性があります。スクリプトの先頭に#!/bin/shがある場合は、#!/bin/bashに変更してみてください。

あなたは/bin/shでそれを使用しようとすると、それはおそらく<<は「ここに文書」を参照し、その結果、その後予期しない<を見ていると仮定し、「構文エラー:リダイレクション予期しない」あなたがしているメッセージ見て。

zshとkshもこの構文をサポートしています。

+0

kshがサポートしています。ダッシュはしません。 –

+0

'cat <(echo" hello ")'の短縮形だと言うのは正確でしょうか? (私は私の理解を深めることを求めています) –

+1

@ Sridhar-Sarnobat:それほどではありません。 'cat <<< hello'は引数なしで' cat'を呼び出し、 'hello'とそれに続く改行を含む一時ファイルからstdinがリダイレクトされます。 'cat <(echo hello)'は、単一の引数で 'cat'を呼び出します。これは、同じデータを読み込むことができる疑似ファイルの名前です。 'cat'は引数なしで同じように動作し、stdinはリダイレクトされますが、読み込むファイルの名前を指定する単一の引数で動作しますが、他のコマンドは異なる動作をします。たとえば、 'ls -l/proc/self/fd/0 <<< hello'は一時ファイルへのシンボリックリンクを表示し、' echo <(echo hello) 'は'/dev/fd/63'を表示します。 –

関連する問題