![난수를 인쇄하기 위해 가변 길이 루프를 만드는 방법은 무엇입니까?](https://linux55.com/image/172524/%EB%82%9C%EC%88%98%EB%A5%BC%20%EC%9D%B8%EC%87%84%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EA%B0%80%EB%B3%80%20%EA%B8%B8%EC%9D%B4%20%EB%A3%A8%ED%94%84%EB%A5%BC%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
사용자에게 난수의 행과 열 수를 묻는 메시지를 표시한 후 난수 행렬을 만들려고 합니다. 중첩된 for 루프만 사용할 수 있습니다.
행과 열이라는 두 가지 변수를 만들었지만 주요 문제는 for 루프가 올바르게 에코되도록 하는 것입니다. 이것은 내 루프 기능입니다
for i in [1..$rows]; do
echo "$RANDOM";
done
i의 값을 1+1로 증가시키려고 시도했지만 상관없이 루프는 한 번만 실행됩니다. 스크립트가 $rows의 값을 읽도록 하고 싶습니다.
답변1
유사한 구문이 없습니다 [x..y]
. {x..y}
라고 생각하실 수도 있지만그건 작동하지 않아if x
또는y
변수.
따라서 다음 중 하나를 시도해 볼 수 있습니다.
for ((i=1;i<=$rows;i++)); do
echo "$RANDOM"
done
또는
for i in $(seq 1 "$rows"); do
echo "$RANDOM"
done
또는
i=0
while (( ++i <= rows)); do
echo "$RANDOM";
done
심지어
i=0
until [ $i -gt $rows ]; do
echo "$RANDOM"
((i++))
done
답변2
astden지적, 사용한 구문이 올바르지 않습니다. 그런 다음 그는 루프의 몇 가지 예를 제시했습니다.회의일하다.
그러나 $rows
임의의 정수 수를 인쇄하려면 다음을 사용할 수도 있습니다.
jot -r "$rows"
또는 동등하게,
jot -r "$rows" 1 100
$rows
1에서 100 사이의 임의의 정수를 출력합니다 ( jot
BSD 시스템 또는 일부 Linux 시스템의 패키지에 포함됨 athena-jot
).
또는,
shuf -i 1-100 -r -n "$rows"
jot
위의 명령과 동일한 작업을 수행합니다 ( shuf
GNU coreutils의 일부입니다).
$cols
시간 항목의 매트릭스를 생성하려면 $rows
다음을 사용할 수 있습니다 rs
( BSD 시스템 또는 일부 Linux 시스템의 패키지 rs
에서 사용 가능 ).rs
$ rows=4
$ cols=6
$ jot -r "$(( rows * cols ))" | rs "$rows" "$cols"
37 29 2 74 5 14
82 86 74 63 73 9
58 10 14 96 12 90
98 13 55 56 40 52
$rows * $cols
난수가 필요하다는 점에 유의하세요 . 여기에 사용된 예는 에서 이러한 값을 가져오지만 jot
( shuf
또는 숫자를 생성하는 다른 명령)을 사용할 수도 있습니다.
답변3
그리고 zsh
:
$ eval print -C4 '$(('{1..20}', RANDOM))'
11190 17138 16156 5735
16751 13545 22647 13244
12925 11584 10984 32387
32093 8170 5305 6102
25136 30299 3944 9956
또는 GNU를 사용하여 shuf
범위를 지정합니다.
$ print -C4 $(shuf -i 0-99 -n 20)
96 55 93 33
25 7 19 60
34 51 88 46
79 13 70 98
63 37 69 41