哪些特殊字符可能会回显并扩展到我的主文件夹?

哪些特殊字符可能会回显并扩展到我的主文件夹?

我正在运行这一行:

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,,属于我的主文件夹(西班牙语),我在其中运行我的自行车DocumentosEscritorio

带参数的 pwgen-y生成至少一个特殊的非字母数字字符;-Nparam 用于选择生成密码的数量 (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

相关内容