Как мне перебрать вывод из shuf?

Если я сделаю gshuf -e $(seq 1 10) в bash, он напечатает числа от 1 до 10 в случайном порядке.

Но если я это сделаю:

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

Он печатает все десять номеров, а затем «следующий».

Как мне перебрать вывод из shuf (или gshuf в os x)? Переменная, a , кажется, является строкой, поэтому я мог разбить ее. Но это похоже неряшливо. Как получить shuf для вывода массива?

5 Solutions collect form web for “Как мне перебрать вывод из shuf?”

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

 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) ) 

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

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

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

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

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

однострочный …

 shuf -e {1..10} | xargs -I% echo % next 
  • Регулярное совпадение в ksh
  • Зачем избегать тривиальных символов в сценарии оболочки?
  • Постоянное обновление переменной в фоновом режиме
  • Файл конфигурации SSH + скриптовый скрипт
  • Что-то не так с пространством в zenity, пытающимся создать скрипт
  • Шелл-скрипт для печати наиболее посещаемых каталогов
  • Как удалить символ новой строки в конце файла?
  • Создайте правило iptables, если это правило еще не существует
  • Фоновая и передняя задача и выполнение задач параллельно
  • Как передать путь к файлу через вызов perl из bash?
  • Как передать несколько строк параметру без цикла for?
  • Linux и Unix - лучшая ОС в мире.