我正在运行这一行:
for i in `pwgen -yB -N 8 1`; do echo "$i"; done
那么输出是:
.
Descargas
Documentos
Escritorio
Imágenes
Música
NetBeansProjects
Plantillas
public_html
Público
Vídeos
.
"
}
"
$
{
其中一些,例如Descargas
,,属于我的主文件夹(西班牙语),我在其中运行我的自行车Documentos
。Escritorio
带参数的 pwgen-y
生成至少一个特殊的非字母数字字符;-N
param 用于选择生成密码的数量 (8),最后一个1
用于选择密码长度 (1)。
我想知道哪个特殊字符可以echo $i
打印为我的家庭内容。
答案1
不要这样做:
for i in `pwgen -yB -N 8 1`
命令替换的结果受路径名扩展。
改为这样做:
pwgen -yB -N 8 1 | while IFS= read -r i; do printf '%s\n' "$i"; done
例子
观察*
下面的输出中出现的内容,表明未执行路径名扩展:
$ pwgen -yB -N 8 1 | while IFS= read -r i; do printf '%s\n' "$i"; done
~
-
*
@
;
\
*
-
答案2
您正在使用 'split' for i in `command`
。
但这也与“文件名生成”(bash 中的路径名扩展)相关,其中(未加引号的)字符,如*
,?
和[
被扩展为“文件名”。
可以通过以下方式关闭:set -f
。
set -f ; for i in `pwgen -yB -N 8 1`; do echo "$i"; done
使用数组可能是个好主意:
$ set -f; arr=( $(pwgen -yB -N 4 1) ); printf '<%s>\n' "${arr[@]}"
<~>
<&>
<_>
<`>
也许:
$ set -f; arr=( $(pwgen -yB -N 5 18) ); printf '%s\n' "${arr[@]}"
oesheisu%ugh>aetas
nae>chootho|yeiwah
quie{thohp+aechuit
ib\iibugeighe<pie?
kie}phah=ngeitaeph
当然,您可以使用 readarray 来填充数组(不需要set -f
):
$ readarray -t arr < <(pwgen -yB -N 8 1)
然后打印所有元素:
$ printf '%s\n' "${arr[@]}"
全部在一行:
$ readarray -t arr < <(pwgen -yB -N 4 12); printf '%s\n' "${arr[@]}"
ioquavoej&ee
che>u}phoej<
iuchoo"shoom
hahd!eumohsu
答案3
它是*
:
for i in `echo '*'`; do echo "$i"; done
如何找到它:
for i in `pwgen -yB -N 100 1 | tee /tmp/f1`; do echo "$i"; done >/tmp/f2
diff f1 f2
您可能需要运行几次,直到看到差异。或者增加N
。