在这文章中,我遇到了以下命令:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32}
我在 Bash 中还没见过这种表达方式。具体来说,开头的和<
的串联让我感到惊讶。据我解释这个命令,我们正在从命令中读取数据,但为什么是第一个?/dev/urandom
tr
/dev/urandom
tr
< /dev/urandom
答案1
重定向运算符可以放置在简单命令中的任何位置(请参阅shell 的控制和重定向运算符是什么?— 这里的“简单”是 POSIX 意义上的,而不是复合)。
首先放置输入重定向有助于使数据流更清晰:从左到右读取,数据从 读取/dev/urandom
,由 处理tr
,然后通过管道传送到head
。
阅读
tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c${1:-32}
tr
相反意味着直到参数之后才知道从哪里获取数据;这里的命令并不多,但是使用更复杂的命令可以产生很大的不同。