我必须测试路径名是否是常规文件,如果它的长度大于50字节,因此我喜欢这样:
if [[ -f $path && `wc -c < $path` -gt 50 ]]; then ......
并且它有效,但是,出于好奇,我也尝试这样做:
if [[ -f $path && `$path > wc -c` -gt 50 ]]; then ......
但它没有用,我也不明白为什么。
出于这个原因,我问你Bash中<
和>
运算符之间的区别。
答案 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将被丢弃)。”