使用set -C搭配
POSIX Shell提供了防止文件意外截断的选项:执行set -C命令可打开Shell所谓的禁止覆盖(noclobber),当它在打开状态下时,单纯的>重定向遇到目标文件已存在时,就会失败。 >|运算符则可令noclobber选项失效。
行内输入(inline input)的<<与<<-
shell的here document用法.(Here Documents)
cmd << delimiter
Here Document Contentdelimiter它的作用就是将两个 delimiter 之间的内容(Here Document Content 部分) 传递给cmd 作为输入参数。delimiter只是一个标识而已,可以替换成任意的合法字符作为结尾的delimiter一定要顶格写,前面不能有任何字符作为结尾的delimiter后面也不能有任何的字符(包括空格)作为起始的delimiter前后的空格会被省略掉Here Document 不仅可以在终端上使用,在shell 文件中也可以使用,例如下面的here.sh 文件在Here Document 的内容中,不仅可以包括普通的字符,还可以在里面使用变量.
cat << EOF > output.shecho "This is output"echo $1EOF使用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。一般来说,<以只读模式打开文件,而>以只写模式打开文件。<>运算符则是以读取与写入两种模式打开给定的文件。(有些系统不支持)