> 和 < 区别 Bash

> and < difference Bash

我必须测试路径名是否为常规文件以及它的长度是否大于 50 字节,因此我这样做:

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

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

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

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

因此我问你 <> 运算符在 Bash 中的区别。

< 是 "read from" —— 重定向输入,而 > 是 "write to" —— 重定向输出。两者后跟要使用的文件的名称。所以

wc -c < $path

运行wc命令,从文件$path

中读取
$path > wc -c

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

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

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

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

如您所见,第二个没有任何意义。始终将可执行文件作为第一个操作数(参数),将正在读取或写入的文件作为第二个操作数。

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

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

因此,命令 wc -c < $path 等同于 cat $path | wc -c$path > wc -c 表示 "run the command $path and store the output in a file named wc (the -c would be discarded)."