我用它来制作密码:
echo $(LC_CTYPE=C < /dev/urandom tr -cd [:graph:] | tr -d 'n' | head -c32) # pwg ##1st
不同的长度,图形到alnum,或者其他什么。
我不明白正在使用的重定向。我理解外部 $(( 格式,但这
echo $(LC_CTYPE=C < /dev/urandom tr -cd [:graph:] ...
没有意义。
- LC_CTYPE是设置字符类型。知道了。
tr
正在将字符转换为集合 :graph: 中的字符。知道了。- 回声在那里给出换行符。
- 但是如何将随机重新分配到 env 变量设置 表达。?
- 怎么,
tr
知道从它之前检索urandom。
?
对我来说,它似乎是:
echo $(LC_CTYPE=C tr -cd [:graph:] < /dev/urandom | tr -d 'n' | head -c32) # pwg ##2nd
这也行得通。我只是不明白为什么第一个变体有效?
手册中的一些信息:
3.6 重定向
在执行命令之前,可以使用由 shell 解释的特殊符号重定向其输入和输出...以下重定向运算符可能位于简单命令的前面或出现在任何位置,也可能出现在命令之后。...
3.7.1 简单的命令扩展
执行简单命令时,shell 会从左到右执行以下扩展、分配和重定向。
- 解析器标记为变量赋值(命令名称前面的单词(和重定向的单词将被保存以供以后处理。
- 不是变量赋值或重定向的单词将被展开(请参阅外壳扩展(。如果扩展后仍有任何单词,则第一个单词被视为命令的名称,其余单词是参数。
重定向- 按上述方式执行(请参阅重定向(。
- 每个变量赋值中"="后面的文本在分配给变量之前会经历波浪号扩展、参数扩展、命令替换、算术扩展和引号删除。
<
不会重定向到<
之前的东西 - 它只是重定向到stdin。 所以顺序并不重要。 无论它在命令行中的哪个位置< /dev/urandom
都将命令的 stdin 重定向到来自/dev/urandom。 在命令之前,在命令之后,在一些参数之前,在参数之后,都无关紧要。 它只是从指定的文件或设备重定向 stdin。