%20%EC%A4%91%EC%97%90%EC%84%9C%20%EB%AC%B4%EC%9E%91%EC%9C%84%EB%A1%9C%20%EC%84%A0%ED%83%9D%EB%90%9C%20%EB%B3%80%EC%88%98.png)
미리 결정된 세 개의 숫자 중에서 난수를 선택하는 변수를 가질 수 있나요?
견본:
var= 10 or 100 or 1000
답변1
배열을 사용하여 값을 보관하고 내장 변수를 사용하여 그 중에서 선택합니다 $RANDOM
. 예를 들어,
x[0]=10 # One decade
x[1]=100 # One century
x[2]=1000 # One millennium
for ((i=1; i < 20; ++i)); do echo -n " ${x[$RANDOM%3]}"; done; echo
1000 10 10 10 10 100 10 100 100 10 10 100 100 100 10 1000 1000 1000 10
임의성의 품질은 가능한 최고는 아니지만(바이트를 읽으 /dev/urandom
려면) 스크립트에 충분할 것입니다.
참고 1:사람들이 주석에서 관찰했듯이 배열 요소를 개별적으로 초기화하는 대신 배열 lital: 을 사용할 수 있습니다 x=(10 100 1000)
.
노트 2:배열의 요소 수를 하드 코딩하는 대신 ${x[$RANDOM%${#x[@]}]}
.
답변2
당신이 사용하는 경우세게 때리다(또는zsh또는ksh93) 그냥 할 수 있습니다 :
echo "$((10**($RANDOM%3+1)))"
또는
var=$((10**($RANDOM%3+1)))
그것을 할당하다var
답변3
GNU coreutils를 사용할 수도 있습니다.shuf
공익사업:
a=$(shuf -n1 -e 10 100 1000)
RANDOM
그러나 다른 답변에 따라 사용하는 것이 거의 확실히 빠릅니다.
답변4
약간 비밀스러운 방법은 다음과 같습니다.
printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0
$var
그러면 필요에 따라 임의의 값이 할당됩니다 . 형식 printf
문자열은 1%0Nd
- 앞에 0이 붙은 상태 0
로 인쇄됩니다 . 여기서는 간격의 임의의 정수입니다 .N
N
[1,3]