2015-12-29 58 views
0

一定要考,如果路径是一个普通的文件,如果它的长度大于50个字节,对于这个原因,我这样做:>和<差异猛砸

if [[ -f $path && `wc -c < $path` -gt 50 ]]; then ...... 

和它的作品,但是,出于好奇,我也试图这样做:

if [[ -f $path && `$path > wc -c` -gt 50 ]]; then ...... 

但它不工作,我不明白为什么。

由于这个原因,我问你在Bash的<>运营商之间的区别。

回答

0

这些操作符是不可交换的(位置不支持热插拔)。

wc -c < $path表示启动wc并使用文件$path作为输入。

$path > wc -c$path这个可执行文件(在你的情况$path不是一个可执行文件),并发送它的输出到文件在wc

正如你所看到的第二个没有意义。始终使可执行文件成为第一个操作数(参数)以及正在读取或写入第二个操作数的文件。

+0

实际上'$ path> wc -c'等价于'$ path -c> wc'。 I/O重定向可以出现在参数之间。这通常不是很有用,但它可以用于长管道:' output.txt' –

+2

@KeithThompson,相当于在bash,是的,但不能保证要由POSIX SH除了在头部或尾部位置支撑(因此'

1

<是“读取” - 重定向输入,而>是“写入” - 重定向输出。两者后面都有要使用的文件的名称。所以

wc -c < $path 

运行wc命令,从文件$path

$path > wc -c 

阅读运行$path命令,写入文件wc

0

<指示shell将操作符右侧的文件内容作为输入提供给左侧的命令。

>指示shell将命令的输出放在左侧,并将其存储在右侧命名的文件中。

因此,命令wc -c < $path相当于cat $path | wc -c$path > wc -c意味着“运行命令$ path并将输出存储在名为wc的文件中(-c将被丢弃)”。