나는 다음 라인을 실행하고 있습니다 :
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
'분할'을 사용하고 있습니다 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
.