Как я циклично выполняюсь по выводу от shuf?

Розеттский камень Unix (ресурс для системных администраторов) мог бы быть тем, который Вы имели в виду.

6
10.03.2015, 00:52
5 ответов

Вы используете скалярное присваивание. Либо используйте массив

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
10
27.01.2020, 20:20

одноклассник ...

shuf -e {1..10} | xargs -I%    echo % next
1
27.01.2020, 20:20

, вам не нужно хранить вывод в переменной:

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) )
8
27.01.2020, 20:20

Просто зацикливание на выходе shuf, здесь переменная не нужна:

for i in $(shuf -e {1..10}); do
  echo "$i"
  echo "next"
done
2
27.01.2020, 20:20

Если вы хотите обработать $a как массив, то вам нужно инициализировать его как массив:

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

Затем ваш цикл выдаст ожидаемый результат.

2
27.01.2020, 20:20

Теги

Похожие вопросы