shuf의 출력을 반복하는 방법은 무엇입니까?

shuf의 출력을 반복하는 방법은 무엇입니까?

bash에서 이 작업을 수행 하면 gshuf -e $(seq 1 10)1부터 10까지의 숫자가 무작위 순서로 인쇄됩니다.

하지만 이렇게 하면:

a=$(shuf -e $(seq 1 10))
for i in "${a[@]}"
do
    echo $i
    echo "next"
done

10개의 숫자를 모두 인쇄한 다음 "next"를 인쇄합니다.

shuf(또는 os x의 gshuf) 출력을 반복하는 방법은 무엇입니까? 변수가 a문자열인 것 같아서 분할할 수 있습니다. 그런데 이건 좀 엉성한 것 같습니다. shuf 출력을 배열로 만드는 방법은 무엇입니까?

답변1

스칼라 할당을 사용하고 있습니다. 배열을 사용하거나

a=( $(shuf -e $(seq 1 10)) )
for i in "${a[@]}"
do
    echo $i
    echo "next"
done

아니면 쉘이 스칼라를 분할하도록 하세요.

a=$(shuf -e $(seq 1 10))
for i in ${a}
do
    echo $i
    echo "next"
done

답변2

출력을 변수에 저장할 필요는 없습니다.

seq 10 | shuf | while read i; do echo $i; done

하위 쉘에서 while 루프를 실행하므로 i변수가 현재 쉘에 지속될 수 없습니다. 이 문제를 해결 shopt -s lastpipe하거나 파이프를 완전히 피할 수 있습니다.

while read i; do echo $i; done < <( shuf -e $(seq 10) )

답변3

배열로 처리 하려면 $a배열로 초기화해야 합니다.

a=( $(shuf -e $(seq 1 10)) )

그러면 루프가 예상한 출력을 생성합니다.

답변4

일방통행 노선...

shuf -e {1..10} | xargs -I%    echo % next

관련 정보