Используя sed с herestring (<<<) и прочитайте -a

Я использую sed с <<< и read чтобы назначить все слова в строке переменным. Что я делаю:

 read -a A0 <<< $(sed '2q;d' /proc/stat) 

Следовательно, sed читает вторую строку файла file и немедленно завершает работу. Строка sed которую прочитала, подается в <<< которая расширяет вход, который он получает от sed и read -a присваивает результирующие значения <<< элементам массива. Является ли использование <<< и sed таким образом хорошей идеей или есть очевидные причины, которые говорят против этого и, прежде всего, есть ли более быстрый способ сделать это?

2 Solutions collect form web for “Используя sed с herestring (<<<) и прочитайте -a”

Вы можете напрямую использовать назначение массива:

 A0=($(sed '2q;d' /proc/stat)) 

Помните, что это выполняет globbing: если вывод команды содержит групповые символы оболочки, то слова, содержащие подстановочные знаки, заменяются списком соответствующих файлов, если они есть. Если на выходе команды может содержаться один из символов \[?* , Временно отключить глобус:

 set -f A0=($(sed '2q;d' /proc/stat)) set +f 

Это может быть крошечным быстрее, чем использование:

 $ time for i in {1..1000}; do read -a A0 <<< $(sed '2q;d' /proc/stat); done real 0m2.829s user 0m0.220s sys 0m0.480s $ time for i in {1..1000}; do A0=($(sed '2q;d' /proc/stat)); done real 0m2.388s user 0m0.128s sys 0m0.276s 

С bash 4.0 и выше вы можете использовать mapfile :

 mapfile -t < <(sed '2q;d' /proc/stat) 

Но mapfile кажется самым медленным:

 $ time for i in {1..1000}; do mapfile -t < <(sed '2q;d' /proc/stat); done real 0m3.990s user 0m0.104s sys 0m0.444s 

Синтаксис кажется слишком сложным для моих глаз. Вместо этого я использовал бы следующее:

 read -a A0 < <( sed '2q;d' /proc/stat ) 

Обычно я использую синтаксис <<< word когда мне нужна команда для ввода ввода из переменной, а не из другой команды.

  • Считать столбцы CSV и удалить
  • Передача аргументов из файла в сценарий bash
  • Переименование или создание уникальных имен файлов
  • / bin / ls: слишком длинный список аргументов
  • Что такое оболочка по умолчанию для .sh в AIX?
  • Нужен сценарий оболочки для копирования файлов с длинными именами и именами
  • Копировать только Конкретный текст файла в другой
  • Выполнить команду на основе результата предыдущей команды (без сбоя всего оператора)
  • Дэш-эквивалент саморасправки выхода скрипта
  • Как извлечь часть строки из файла
  • Как я могу безопасно получить версию ksh?
  • Linux и Unix - лучшая ОС в мире.