Edw*_*lds 4 command-line bash redirect
我知道<, <(), <<all 用于提供输入, >,>()用于重定向输出。
但我不知道它们之间有什么明显的区别以及何时使用它们。如果可能,请详细解释并附上参考资料。谢谢
Oli*_*Oli 12
“何时使用”实际上取决于您在做什么。这就像询问何时使用十字螺丝刀或一字螺丝刀一样。我可以告诉你它们都是什么,它们的作用是什么,但你何时使用每一个,取决于你。
所有这些都在TLDP Advanced Bash Scripting Guide 中有详细记录。如果你需要例子,那就是这个地方。
< filename 从文件读取到 STDIN> filename 将 STDOUT 写入文件,覆盖任何内容。>> filename 将 STDOUT 写入文件,如果它已经存在则追加。<(command) 吸收内部命令的输出并提供文件名>(command)为外部命令提供文件名,但实际上将写入它的任何内容重定向到内部command.<<TOKEN是一个 here 文档,又名 heredoc。它会读入 STDIN 之后的任何内容,直到TOKEN再次看到为止。它对多行内容很有用。它必须跟一个换行符。除非您引用标记,否则heredocs 支持变量替换。<<-TOKEN与上面一样,只是它会忽略前导选项卡(但仅限选项卡)。这对于保留源格式很方便,但它确实只适用于选项卡。它在 Stack Exchange 站点上变得无用,因为它们用制表符代替空格:(<<"TOKEN"是一个不能替代的heredoc $variables。<<<"string"是一个herestring。它被读入 STDIN。这可以进行变量替换。| command 将当前的 STDOUT 加入到 command|& command将 STDOUT 和 STDERR 连接到的 STDIN command(用于 grepping 错误输出)1>并且2>用于显式重定向 STDOUT 和 STDERR。>暗示1>所以你很少看到它明确使用。>&1,>&2可用于重定向到STDOUT 和 STDIN。/dev/std{in,out,err}也作为基本输入/输出/错误文件描述符的符号链接存在。例如,当某些内容只接受文件名参数但您希望它写入 STDOUT 时,这非常方便。