裸<做什么?


10

bash 如果您运行类似的命令,似乎并没有抱怨

$ < some-file-that-exists

似乎什么都没发生。

您也可以使用

$ <<<"any string"

甚至过程替代。

那么这到底是做什么的,为什么允许这样做。它对任何东西有用吗?


顺便说一句:对于出色的ZSH,“ <foobar”与“ less foobar”相同,因为您将foobar重定向到外壳。我认为这是一种非常直观的行为。裸机<会给您一个错误(zsh: parse error near `\n'),因为没有给出任何参数。
数学

@math您将在中遇到类似的错误bash,但这很有趣less
爆炸药

Answers:


20

<为可能在重定向指令之前或之后发生的命令设置重定向。即

$ < file wc

以及

$ wc < file

但是,如果您不给出命令,bash将设置重定向,并且不执行其他任何操作。对于输入重定向,这相当于您看到的内容,如果文件存在并且可读,则什么也没有。如果文件不存在或不可读,bash将发出错误信号。对于输出重定向,如果不存在则将创建输出文件。如果使用现有的任何输出文件,该文件将被截断>;如果>>使用,则不截断。


换句话说,它们是一个简明的存在和创造
棘轮怪胎

@Kyle Jones我认为您在最后一句话中不匹配两个运算符。
jamesbtate 2012年

@Puddingfox谢谢。为了清楚起见,我已经编辑了连续句子。
凯尔·琼斯

有什么理由要使用< file wcvs wc < file吗?
爆炸药2012年

1
@tandu使用交互式shell时非常方便。假设您有一个使用重定向的命令,并且想用不同的最后一个参数重复该命令。如果重定向位于该行的开头,则很容易键入control-P,然后编辑最后一个参数,而不必像在结尾处那样跳过“ <foo> bar 2>&1”语言。除此之外,我发现它没有用。
凯尔·琼斯

5

<默认情况下从标准输入或文件中读取。您的表达式对输入不做任何事情,因为您在阅读后没有做任何事。

如果在末尾执行<some-file-that-exists> outputfile,那么您将看到您刚刚读入第一个文件的内容并将其写入第二个文件。

<<<是这里的doc格式,因此它从字符串而不是文件中读取。cat <<<“任何字符串”以查看您已阅读的内容。


2
供将来参考,请编辑您的答案以添加详细信息,而不添加评论
Nate Koppenhaver

2
“如果在末尾执行<some-file-that-exists> outputfile,那么您将看到您刚刚读入第一个文件的内容并将其写入第二个文件。” 这是错误的;没有命令,输出文件将被截断为零字节。
凯尔·琼斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.