Shell

什麼特殊字元可能會回顯到我的主文件夾?

  • August 6, 2016

我正在執行這一行:

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參數用於選擇生成密碼的數量(8),最後一個1用於選擇密碼長度(1)。

我想知道哪個特殊字元可以echo $i列印為我的首頁內容。

不要這樣做:

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
~
-
*
@
;
\
*
-

您在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

引用自:https://unix.stackexchange.com/questions/301628