shell额外的重定向运算符

本文介绍 POSIX Shell 中的重定向技巧,包括如何防止文件意外截断、使用行内输入 (heredoc) 以及双向重定向 (<>) 的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用set -C搭配

POSIX Shell提供了防止文件意外截断的选项:执行set -C命令可打开Shell所谓的禁止覆盖(noclobber),当它在打开状态下时,单纯的>重定向遇到目标文件已存在时,就会失败。 >|运算符则可令noclobber选项失效。


行内输入(inline input)的<<与<<-

shell的here document用法.(Here Documents)

cmd << delimiter

  Here Document Content
delimiter
它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数。
 delimiter只是一个标识而已,可以替换成任意的合法字符
作为结尾的delimiter一定要顶格写,前面不能有任何字符
作为结尾的delimiter后面也不能有任何的字符(包括空格)
作为起始的delimiter前后的空格会被省略掉
Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件
在Here Document 的内容中,不仅可以包括普通的字符,还可以在里面使用变量.

cat << EOF > output.sh
echo "This is output"
echo $1
EOF
使用sh here.sh HereDocument 运行脚本得到output.sh的内容
 
echo "This is output"
echo HereDocument
但是有时候不想展开这个变量怎么办呢,可以通过在起始的 delimiter的中添加 双引号实现来实现,例如将上面的here.sh 改为
 
cat << "E"OF > output.sh  #注意引号
echo "hello"
echo "world"
EOF
得到的output.sh 的内容为
 
echo "This is output"
echo $1
<< 变为 <<-
Here Document 还有一个用法就是将 '<<' 变为 '<<-'。 使用 <<- 的唯一变化就是Here Document 的内容部分每行前面的 tab (制表符)将会被删除掉,这种用法是为了编写Here Document的时候可以将内容部分进行缩进(注意只有开头的制表符会被删除,开头的空格则不会删除)


<>

使用program <> file,可供读取与写入操作。默认是在标准输入上打开file。一般来说,<以只读模式打开文件,而>以只写模式打开文件。<>运算符则是以读取与写入两种模式打开给定的文件。(有些系统不支持)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值