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

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

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

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

  • Вывести вывод сценария bash в строку, которая называется сценарием bash
  • sed в bash с переменными и двойными кавычками вызывает неисполненную ошибку
  • Какие методы регулярных выражений для проверки ввода можно использовать в сценариях оболочки?
  • Как создавать функции bash с использованием труб?
  • KSH / BASH Максимальный размер массива
  • Почему код выхода скрипта имеет другое значение, чем то, что возвращается?
  • Регулярное выражение, как получить значение в сценарии оболочки?
  • perl one liner + как соответствовать IP-адресу, который находится в поле файла first / sec
  • 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 когда мне нужна команда для ввода ввода из переменной, а не из другой команды.

    Interesting Posts

    термальный термос

    Unix-эпоха в миллисекундах

    Как отключить предупреждающее сообщение для репозиториев Apt с использованием SHA1?

    Установить статический IP-адрес в CentOS 6.4?

    Вставка файлов со скрытыми пространствами

    Определите исходящее соединение (ssh) с командой who

    Как я могу изменить разрешение консоли, которое обеспечивается с помощью инструментария XL?

    Наличие постоянного IRC-клиента

    Как сравнивать числа в последовательных строках в файле с помощью awk

    Нужен список жестких дисков, исключая мой жесткий диск os

    раскомментирование определенного кода в большем файле

    написать существующие конфигурации xfce4 на диск

    Asible, пытаясь найти способ заставить тайм-аут задачи на хосте, на котором он сейчас работает

    Убейте отключенный сеанс SSH, запущенный в `screen`

    Как можно отключить корневую оболочку через определенный промежуток времени?

    Linux и Unix - лучшая ОС в мире.