一定要考,如果路径是一个普通的文件,如果它的长度大于50个字节,对于这个原因,我这样做:>和<差异猛砸
if [[ -f $path && `wc -c < $path` -gt 50 ]]; then ......
和它的作品,但是,出于好奇,我也试图这样做:
if [[ -f $path && `$path > wc -c` -gt 50 ]]; then ......
但它不工作,我不明白为什么。
由于这个原因,我问你在Bash的<
和>
运营商之间的区别。
一定要考,如果路径是一个普通的文件,如果它的长度大于50个字节,对于这个原因,我这样做:>和<差异猛砸
if [[ -f $path && `wc -c < $path` -gt 50 ]]; then ......
和它的作品,但是,出于好奇,我也试图这样做:
if [[ -f $path && `$path > wc -c` -gt 50 ]]; then ......
但它不工作,我不明白为什么。
由于这个原因,我问你在Bash的<
和>
运营商之间的区别。
这些操作符是不可交换的(位置不支持热插拔)。
wc -c < $path
表示启动wc
并使用文件$path
作为输入。
$path > wc -c
指$path
这个可执行文件(在你的情况$path
不是一个可执行文件),并发送它的输出到文件在wc
。
正如你所看到的第二个没有意义。始终使可执行文件成为第一个操作数(参数)以及正在读取或写入第二个操作数的文件。
<
是“读取” - 重定向输入,而>
是“写入” - 重定向输出。两者后面都有要使用的文件的名称。所以
wc -c < $path
运行wc
命令,从文件$path
$path > wc -c
阅读运行$path
命令,写入文件wc
<
指示shell将操作符右侧的文件内容作为输入提供给左侧的命令。
>
指示shell将命令的输出放在左侧,并将其存储在右侧命名的文件中。
因此,命令wc -c < $path
相当于cat $path | wc -c
。 $path > wc -c
意味着“运行命令$ path并将输出存储在名为wc的文件中(-c将被丢弃)”。
实际上'$ path> wc -c'等价于'$ path -c> wc'。 I/O重定向可以出现在参数之间。这通常不是很有用,但它可以用于长管道:' output.txt' –
@KeithThompson,相当于在bash,是的,但不能保证要由POSIX SH除了在头部或尾部位置支撑(因此'