세 개의 숫자 (10, 100 및 1000) 중에서 무작위로 선택된 변수


19

세 개의 미리 결정된 숫자에서 임의의 숫자를 선택하는 변수를 가질 수 있습니까?

견본:

var= 10 or 100 or 1000

1
UNIX에서 프로그래밍하지 않으므로 코드를 작성할 수 없지만 다른 접근 방식은 다음과 같습니다. val = left ( "1000", length = Random 2 to 4). 관련이없는 3 개의 값을 가지려면 코드가 비슷합니다.
Sensii Miller

답변:


31

배열을 사용하여 값을 보유하고 내장 변수를 사용하여 값 중에서 선택하십시오 $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

임의성 (random of randomness)은 최선이 아니지만 (읽기 바이트 /dev/urandom) 스크립트에는 충분할 것입니다.

참고 1 : 사람들이 의견에서 관찰했듯이 배열 요소를 개별적으로 초기화하는 대신 배열 리터럴을 사용할 수 있습니다 x=(10 100 1000).

참고 2 : 배열의 요소 수를 하드 코딩하는 대신에 로돔 요소를 추출 할 수 있습니다 ${x[$RANDOM%${#x[@]}]}.


5
+1이 특별한 경우 zeppelin의 대답이 영리하지만 배열 방식이 훨씬 일반적입니다.
Kamil Maciorowski

4
x=(10 100 1000)bash에서 리터럴로 배열을 만드는 것처럼 보입니다 . 이는 더 읽기 쉽고 관용적입니다
cat cat

1
@cat : 가독성에 대한 의견이 다릅니다. 개별 항목을 별도의 줄에 배치하고 일반적으로 값을 설명하는 후행 주석이 있습니다.
AlexP

@AlexP 아, 나는 그것이 의도적이라고 생각하면 언급하지 않을 것 같아요. 공정하지만 충분히
고양이

1
@AlexP 그런가요 x[0]=10 # This sets the first value of x to ten. Ten is the number of fingers that humans have (excepting birth defects or mutilation). It is also the sum of 9 and 1, or product of 5 and 2. Ten is not prime. A traditional Christmas gift is ten lords a-leaping.?
Nick T

30

bash (또는 zsh 또는 ksh93 )를 사용하는 경우 다음을 수행 할 수 있습니다.

echo "$((10**($RANDOM%3+1)))"

또는

var=$((10**($RANDOM%3+1)))

var 에 할당


:). 당신이 그것을 볼 때 쉽지만 나는하지 않았다. 감사!!
Espen Larsen



5

약간 비밀스러운 방법이 있습니다.

printf -v var '1%0*d' $(( RANDOM % 3 + 1 )) 0

$var필요에 따라 임의의 값이 할당 됩니다. printf형식 문자열은 1%0Nd-이 발생 0하여 인쇄되는 N선행 0, N간격의 임의 정수일 것이다 [1,3].

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.