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

  • Я хочу запустить команду cut, чтобы извлечь какой-либо столбец из большого файла и вставить его в другой файл:
  • Нужно ли инкапсулировать переменные awk в кавычки для их дезинфекции?
  • spawn - команда не найдена!
  • Передача нескольких аргументов с пробелами через скрипт в ssh
  • Как имитировать трубку?
  • Суммируйте определенные поля данных файла журнала Apache CLF
  • Как удалить весь набор файлов в случайном порядке?
  • Код возврата lftp
  • Преобразование цикла кода в функцию
  • Сделать cp возвращает значение ошибки, если цель существует
  • Как прочитать файл свойств в ассоциативный массив?
  • Извлечь имена файлов со структурой каталога в CSV-файл (отдельный файл csv для каждого имени изображения)
  • Linux и Unix - лучшая ОС в мире.