<<< 是什么意思?以下是一个例子:
$ 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
答案4
这里的意思是字符串。
<<< strings
字符串被扩展并提供给标准输入上的命令。
在您的示例中,字符串aaa
通过 stdin 输入到 sed 命令。