#!/bin/ksh
for i in `seq 1 10` ; do
n=`expr $RANDOM`;
(
for (( k=1; k<=10; k++ ))
do
echo -n "$k"
done
)
echo "$k, $n"
done
이 스크립트를 작성했지만 정확한 결과가 나오지 않습니다.
12345678910, 17517
12345678910, 3695
12345678910, 8841
12345678910, 11553
12345678910, 2019
12345678910, 3503
12345678910, 25789
12345678910, 24825
12345678910, 8039
12345678910, 30532
1-10의 난수를 나란히 놓아야 하지만
답변1
어쩌면 다음과 같이 배열을 사용하여 r
루프가 반복될 때마다 10개의 난수를 저장합니다 i
.
#!/bin/ksh
for i in $(seq 1 10) ; do
r=()
for ((k=1; k<=10; k++)); do
r+=($RANDOM)
done
echo "$i, ${r[@]}"
done
출력은 다음과 같습니다:
$ ./seq.ksh
1, 28324 21310 5112 23165 31527 5779 17343 31716 11594 9769
2, 7205 15089 16436 10276 9784 18724 18137 20754 7878 11092
3, 12087 19351 25813 77 25109 12122 14299 287 21751 9714
4, 29046 17308 31024 1391 7705 29784 7170 25049 28732 18765
5, 2051 3169 1086 18488 13445 10871 4444 31583 31625 12323
6, 9907 10945 31675 2952 11023 24016 15075 25322 24303 4059
7, 2268 20582 21367 525 21973 29073 30309 29143 21355 26273
8, 15140 23406 29443 16227 9126 10121 27098 13571 8936 25956
9, 25894 18844 4134 24801 21797 15158 16049 4104 7712 7585
10, 8163 9981 28167 29531 10506 17372 25836 8047 13748 14423
업데이트: 귀하의 댓글을 본 후
#!/bin/ksh
for i in $(seq 1 10) ; do
printf "%2i, %5i\n" "$i" "$RANDOM"
# or if you prefer echo to printf, just:
# echo "$i,$RANDOM"
done
산출:
1, 23984
2, 3987
3, 31979
4, 18977
5, 1492
6, 30008
7, 17715
8, 14603
9, 20650
10, 9891
노트:
- 명령 대체에 백틱을 사용하지 말고
$()
대신 백틱을 사용하십시오. 바라보다cmd
백틱(예: *sh )은 셸에서 더 이상 사용되지 않습니까? - 명령 대체나 다른 변수에
expr
저장할 필요 없이 변수 할당( )만 사용하면 됩니다.$RANDOM
var="$RANDOM"
printf
출력 형식을 더 좋게 하려면 대신 사용하십시오echo
. printf를 사용하여 Perl과 유사한 함수를 작성할 수도 있습니다join
(join_by
다음의 함수 참조).Bash에서 배열 요소를 연결하는 방법은 무엇입니까?좋은 예를 들자면 이 함수는 ksh와 bash 모두에서 작동합니다.
답변2
프로세스 대체를 이해하는 쉘이 있다고 가정합니다.
$ paste <( seq 10 ) <( shuf -n 10 -r -i 0-100 )
1 50
2 59
3 54
4 89
5 73
6 6
7 46
8 35
9 32
10 55
그러면 를 사용하여 탭으로 구분된 두 개의 숫자 열이 생성됩니다 paste
.
첫 번째 열은 seq
GNU 도구가 출력하는 1부터 10까지의 숫자입니다.
-r
두 번째 열은 (다른 GNU 도구)에서 생성된 0에서 100 사이의 난수(로 인해 반복될 수 있음)로 구성됩니다 .shuf
탭 외에 다른 구분 기호를 원하시나요? 다음 -d
과 함께 사용 하세요 paste
:
$ paste -d , <( seq 10 ) <( shuf -n 10 -r -i 0-100 )
1,37
2,56
3,33
4,48
5,71
6,45
7,52
8,52
9,99
10,80