>和<差异Bash

时间:2015-12-29 23:25:07

标签: linux bash wc

我必须测试路径名是否是常规文件,如果它的长度大于50字节,因此我喜欢这样:

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

并且它有效,但是,出于好奇,我也尝试这样做:

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

但它没有用,我也不明白为什么。

出于这个原因,我问你Bash中<>运算符之间的区别。

3 个答案:

答案 0 :(得分:1)

<是&#34;从&#34; - 重定向输入,而>是&#34;写入&#34; - 重定向输出。两者都后跟要使用的文件的名称。所以

wc -c < $path

运行wc命令,从文件$path

中读取
$path > wc -c

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

答案 1 :(得分:0)

这些运算符不可交换(位置不可交换)。

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

$path > wc -c表示在$path启动可执行文件(在您的情况下$path不是可执行文件)并将其输出发送到wc的文件。

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

答案 2 :(得分:0)

<指示shell获取操作符右侧文件的内容,并将它们作为左侧命令的输入提供。

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

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