Розеттский камень Unix (ресурс для системных администраторов) мог бы быть тем, который Вы имели в виду.
Вы используете скалярное присваивание. Либо используйте массив
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
, вам не нужно хранить вывод в переменной:
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) )
Просто зацикливание на выходе shuf
, здесь переменная не нужна:
for i in $(shuf -e {1..10}); do
echo "$i"
echo "next"
done
Если вы хотите обработать $a
как массив, то вам нужно инициализировать его как массив:
a=( $(shuf -e $(seq 1 10)) )
Затем ваш цикл выдаст ожидаемый результат.