Ubuntu中的重定向器"<<<"?

jmg*_*ner 18 bash ubuntu dash-shell

我收到了这个错误

语法错误:重定向意外

在线:

 if grep -q "^127.0.0." <<< "$RESULT"
Run Code Online (Sandbox Code Playgroud)

我如何在Ubuntu中运行它?

Kei*_*son 27

<<<是一个特定于bash的重定向操作符(因此它不是特定于Ubuntu).所述文档是指它作为一个"在这里字符串",所述的变体"在这里文档".

3.6.7这里的字符串

这里文档的一个变体,格式是:

<<<字

被扩展并在其标准输入上提供给命令.

一个简单的例子:

$ cat <<< hello
hello
Run Code Online (Sandbox Code Playgroud)

如果您收到错误,可能是您使用bash以外的shell执行命令.如果您#!/bin/sh位于脚本的顶部,请尝试将其更改为#!/bin/bash.

如果您尝试使用它/bin/sh,它可能假设<<引用"here here",然后在此之后看到意外<,导致您看到的"语法错误:重定向意外"消息.

zsh和ksh也支持这种语法.

  • @Sridhar-Sarnobat:不太好.`cat <<< hello`调用没有参数的`cat`,stdin从包含`hello`后跟换行符的临时文件重定向.`cat <(echo hello)`用一个参数调用`cat`,这是一个伪文件的名称,它可以从中读取相同的数据.`cat`表现相似,没有参数和stdin重定向,而单个参数命名要读取的文件,但其他命令的行为可能不同.例如,在我的系统上`ls -l/proc/self/fd/0 <<< hello`列出临时文件的符号链接,`echo <(echo hello)`打印`/ dev/fd/63`. (4认同)

Hal*_*ary 21

if grep -q "^127.0.0." <<< "$RESULT"
then
    echo IF-THEN
fi
Run Code Online (Sandbox Code Playgroud)

是特定于Bash的东西.如果您使用的是另一个与bourne兼容的shell,请尝试:

if echo "$RESULT" | grep -q "^127.0.0."
then
    echo IF-THEN
fi
Run Code Online (Sandbox Code Playgroud)