2013-04-16 56 views
11

我得到這個錯誤在Ubuntu中重定向器「<<<」?

Syntax error: redirection unexpected

在該行:

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

我如何在Ubuntu上運行呢?

+2

是不是重定向單個左尖括號? < –

+0

代碼從左到右。過了一段時間,但如果我記得正確的話,就是用'>>「$ RESULT」'重定向它。 – 2013-04-16 19:15:35

+1

你想用這個命令實現什麼? '$ RESULT'的價值是什麼? –

回答

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

是Bash特定的東西。如果您使用的是不同的Bourne-Compaatable外殼,請嘗試:

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

解決了,謝謝! – jmginer

+0

謝謝@Hal這也解決了我的問題。 –

2

它爲我在Ubuntu上,如果我完成你IF塊:

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 String」,即"Here Document"的變體。

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的其他一個shell執行命令。如果您的腳本頂部有#!/bin/sh,請嘗試將其更改爲#!/bin/bash

如果您嘗試與/bin/sh使用它,它可能假定<<是指「在這裏的文檔」,然後看到後意外<,導致「語法錯誤:重定向意外」的消息,你是看到。

zsh和ksh也支持這種語法。

+0

ksh支持它。破折號不。 –

+0

準確地說它是'cat <(echo「hello」)''的簡寫形式嗎? (我只是想要加深我的理解) –

+1

@ Sridhar-Sarnobat:不完全。 'cat <<< hello'調用沒有參數的'cat',stdin從包含'hello'的臨時文件重定向到一個換行符。 'cat <(echo hello)'用一個參數調用'cat',它是一個可以從中讀取相同數據的僞文件的名稱。 'cat'的行爲類似,沒有參數,標準輸入重定向與用單個參數命名要讀取的文件,但其他命令的行爲可能不同。例如,在我的系統上,'ls -l/proc/self/fd/0 <<< hello'列出臨時文件的符號鏈接,'echo <(echo hello)'打印'/ dev/fd/63'。 –

相關問題