<<< 是什么意思?以下是一个例子:

$ sed 's/a/b/g' <<< "aaa"
bbb

它是适用于更多 Linux 命令的通用命令吗?

看起来它正在向sed程序提供 string aaa,但是 << 或 < 通常​​不是用于此目的吗?

答案1

其他人已经回答了基本问题:它是什么? (答案:这是一个这里的字符串.)

让我们看看为什么它有用。

您还可以将字符串输入命令的标准输入,如下所示:

echo "$string" | command

然而,在 Bash 中,引入管道意味着各个命令在子 shell 中运行。考虑一下:

echo "hello world" | read first second
echo $second $first

第二个 echo 命令的输出仅打印一个空格。哇啊啊?我的变量发生了什么?由于读取命令位于管道中,因此它在子 shell 中运行。它正确地从其标准输入读取 2 个字并分配给变量。但命令完成后,子 shell 退出并且变量丢失了。

有时你可以用大括号解决这个问题:

echo "hello world" | {
    read first second
    echo $second $first
}

如果包含了您对值的需求,但您的脚本的当前 shell 中仍然没有这些变量,那就可以了。

为了解决这种令人困惑的情况,请使用此处的字符串:

read first second <<< "hello world"
echo $second $first

啊,好多了!

答案2

<<<表示此处的字符串。

$ cat <<< 'hi there'
hi there

它将右侧的单词传递到左侧命令的标准输入。


<<表示此处的文档。

$ cat <<EOF
> hi
> there
> EOF
hi
there

EOF可以是任何单词。

Here 文档通常在 shell 脚本中用于创建整个文件或显示长消息。

cat > some-file <<FILE
foo
bar
bar bar
foo foo
FILE

<将文件的内容传递到命令的标准输入。

$ cat < /etc/fstab
/dev/sda2               /boot   ext4            nosuid,noexec,nodev,rw,noatime,nodiratime       0 2
/dev/sda4               /       ext4            rw,noatime,nodiratime,  0 1
/dev/sdb5               /var    ext4            nosuid,noexec,nodev,rw,relatime 0 2
 ...

答案3

看看Bash 手册页。这个符号是所谓的这里的文件&这里是字符串。它允许您将多行数据输入生成为一个连续字符串。您所询问的变体称为这里的字符串

摘自 Bash 手册页

Here Strings
   A variant of here documents, the format is:

          <<<word

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

笔记:欲了解更多信息,您还可以查看Bash 参考手册其中讨论了这里的字符串。

答案4

这里的意思是字符串。

<<< strings

字符串被扩展并提供给标准输入上的命令。

在您的示例中,字符串aaa通过 stdin 输入到 sed 命令。

相关内容