미리 정해진 세 개의 숫자 중에서 난수를 선택하는 변수를 가질 수 있나요?
견본:
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:x=(10 100 1000)
사람들이 의견에서 관찰했듯이 배열 요소를 개별적으로 초기화하는 대신 배열 리터럴을 사용하는 것이 물론 가능합니다 .
노트 2:배열의 요소 수를 하드 코딩하는 대신 임의의 요소를 추출할 수 있습니다 ${x[$RANDOM%${#x[@]}]}
.
답변2
당신이 사용하는 경우세게 때리다(또는다루기 힘든또는크쉬 93) 다음과 같이 할 수 있습니다.
echo "$((10**($RANDOM%3+1)))"
또는
var=$((10**($RANDOM%3+1)))
그것을 할당하다변하기 쉬운
답변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]