¶输入/输出重定向
1 | command > file # 输出重定向到file |
- 标准输入:stdin,文件描述符为0
- 标准输出:stdout,文件描述符为1
- 标准错误:stderr,文件描述符为2
- /dev/null
1 | command > file 2>&1 # stdout和stderr都输出到file |
¶Here document
1 | n << delimiter |
将两个delimiter间的内容重定向输出后作为标准输入传递给文件描述符n。其中结尾的delimiter需要顶格写,周围不能有空格,但开始的delimiter周围的空格会被忽略。
delimiter应选择不会在document中出现,且不会引起混淆的字符串(字母开头,可包含字母和数字)。
使用<<-
,可以让document保持缩进。
delimiter如果加单/双引号,则document中的内容不会进行shell替换,如变量、命令等。
输出重定向在开始的delimiter后指定。
¶Here string
1 | n <<< word # 等价于echo word | n |
word加单引号不会进行shell替换,双引号时会。
¶Command substitution
1 | $(command) |
命令替换允许执行命令并用命令的输出替换命令文本。
¶Process substitution
1 | <(command) |
进程替换允许将命令的输出保存到一个临时文件(命名管道)中,然后作为另一个命令的输入。
1 | $ echo <(ls) |
注:诸如管道、输入重定向、here document、here string都是将内容推送到标准输入流中,而进程替换则是保存到一个临时文件中,并用临时文件名来替换命令。这显然更强大。可以通过< <(command)
来推送到标准输入流。
另外注意是否添加引号可能会有区别。