답변:
random="$(dd if=/dev/urandom bs=3 count=1)"
It treats the output of a command like a variable.
실제로 문자열로 의미합니까?
$()
bash 특정이 아닌 매우 보편적입니다. BTW, 쉘이 변수에 저장할 수있는 문자에 제한을 두지 않도록주의하십시오. 예를 들어 테스트 한 bash 버전은 문자열에서 null (\ x00)을 제외합니다.
head -c 500 /dev/urandom | tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
리터럴 대시 문자를 원할 경우, 대시 문자는와 달리 문자열의 끝 부분에 있어야합니다 *-_
.
그리고 위의 명령 세트로 인해 수행되는 작업을 설명합니다.
head -c 500 /dev/urandom
:에서 첫 500 자 (바이트)를 얻습니다 /dev/urandom
.tr -dc 'a-zA-Z0-9~!@#$%^&*_-'
: 첫 번째 명령의 출력에서 지정된 문자를 제외한 모든 문자를 제거하십시오 'a-zA-Z0-9~!@#$%^&*_-'
.fold -w 3
: 두 번째 명령의 출력을 한 줄에 3 자씩 형식화하십시오. head -n 1
:에 세 번째 명령 결과의 첫 번째 행을 표시합니다 stdout
.fold -w 3 | head -n 1
a로 head -c 3
새로운 라인 문자가 마지막에 필요하지 않은 경우.
Illegal byte sequence
합니다. 이를 해결하려면 "C"인코딩을 사용하십시오. 에 명령을 변경 :head -c 500 /dev/urandom | LC_ALL=C tr -dc 'a-zA-Z0-9~!@#$%^&*_-' | fold -w 3 | head -n 1
다음은 base64 문자열을 생성하는 것입니다. base64 문자열로 제한되어 있어도 패딩이 제거되므로 디코딩 할 수 없으므로 어쨌든 필요하지 않을 것입니다.
cat /dev/urandom | base64 | head -c 5
대체 5
당신이 원하는 문자의 수.
그러나 어떤 이유로 든 디코딩해야하는 경우 base64
파이프 끝으로 이동 하십시오. 그런 다음 urandom에서 5 문자를 수집하고 올바른 패딩으로 base64로 인코딩하지만 마지막 문자열은 패딩으로 인해 원하는 것보다 길 수 있습니다.
cat /dev/urandom | head -c 5 | base64
cat
하면 주어진 양보다 많은 N
문자 를 읽고 엔트로피를 고갈시킬 수 있습니다. 유용한 답변이 아닙니다.
cat
모두 이후가 base64
와 head
작동 및 엔트로피를 고갈 안이 경우, 인수로 파일 이름을 걸릴 수 있습니다. stackoverflow.com/questions/10031344/…
이 시도: dd if=/dev/urandom bs=1 count=3
결과를 $ variable에 넣으려면 다음을 수행하십시오.
variable=`dd if=/dev/urandom bs=1 count=3`
인쇄 할 수 없을 수도 있습니다.
가장 쉬운 해결책은 다음과 같이 간단합니다.
$ head -cN /dev/urandom
$()
작동합니까?