Используя 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 когда мне нужна команда для ввода ввода из переменной, а не из другой команды.

  • OS / X: невозможно выполнить сценарии оболочки - выдает новое окно, которое немедленно выйдет
  • Вывод команды при передаче по другой команде
  • Проверка md5sum (без файла)
  • Сообщение об ошибке Shell script
  • Извлечь определенный текст из переменной в сценарии оболочки
  • Задание CRON для выполнения команды с низкой памятью
  • Возможно ли иметь комментарии в многострочных командах в рыбе?
  • Bash для обнаружения системы контроля версий путем проверки статуса возврата команды
  • как добавить файл в ipset в сценарий оболочки?
  • Сравнение полей с разделителями
  • Как безопасно отменить поиск dns на ip в сценарии оболочки
  • Linux и Unix - лучшая ОС в мире.