Linux 中的输入重定向符号:<、<< 和 <<< 的解释与用法

Linux 中的输入重定向符号:<、<< 和 <<< 的解释与用法

在Linux中,<、<< 和 <<< 是三种不同的输入重定向符号,它们分别有不同的用途

<(单小于号)

这是最基础的输入重定向符号,用于将文件内容作为命令的标准输入。例如:

command < input_file

在这个例子中,command 命令会从 input_file 中读取数据,而不是从键盘接收输入。

<<(双小于号,后跟分界符)

这种形式被称为“Here Documents”,它允许你直接在命令行或脚本中定义一大段文本,然后将其作为命令的标准输入。分界符可以是任意不包含空格的字符串,通常是一个单词或者一对引号。以下是一个示例:

command << "EOF"
Here is some text to be passed as input.
It can span multiple lines.
EOF
# 编译一个docker镜像,不写Dockerfile文件,直接从重定向流获取
docker build -t example.com/iximiuz/test:latest - << EOF
FROM busybox:latest
CMD echo just a test
EOF

# 输入的多行信息,保存到default.conf
cat << EOF > default.conf
key=value
EOF

# 另外一种写法,输入的多行信息,保存到default.conf
cat  << EOF | tee default.conf
character=utf8
EOF

当shell执行到 << "EOF" 时,它会开始读取下一行直到遇到指定的结束标记(这里是 “EOF”),并将这些内容作为一个整体传递给 command

注意事项

<< 后面跟的分隔符加双引号和不加双引号的区别在于是否允许内部的shell扩展:

  1. 不加双引号
command << delimiter
unquoted content here
$variable_expansion
$(command_substitution)
delimiter

在这种情况下,Here Document 内部的内容会经过 shell 解析,这意味着变量扩展 ( v a r i a b l e e x p a n s i o n ) 、命令替换 ( variable_expansion)、命令替换 ( variableexpansion)、命令替换((command_substitution)) 等会被执行。

  1. 加双引号:
command << "delimiter"
quoted content here
$variable_expansion
$(command_substitution)
delimiter   

当分隔符用双引号包围时,Here Document 内部的内容将被视为字面值,即除了换行符之外,所有的内容都将被原样传递给命令,包括 $variable_expansion 和 $(command_substitution),它们不会被 shell 解释执行。

<<<(三小于号)

这是所谓的“Here Strings”机制,在Bash和其他一些Shell中可用。它用来将一个字符串直接传送给命令作为标准输入,而不需要创建临时文件。

command <<< "This string becomes stdin"

在这里,command 将接收到字符串 “This string becomes stdin” 作为其输入,而不必从文件或其他I/O流中读取。

总结

总结起来,这三个符号都是为了改变命令默认的输入来源,但它们各自以不同方式提供了灵活性和便利性,适应不同的输入重定向场景。欢迎关注我的公众号鲁班曰

参考文献

不为人知的linux技巧:掌握 <、<< 和 <<< 带来的奇妙功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AshCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值