Shell
什麼特殊字元可能會回顯到我的主文件夾?
我正在執行這一行:
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