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