Nvidia не будет работать на сервере Ubuntu 16.04 с Lxde

Прежде всего, вам не обязательно нужен массив, чтобы обрабатывать выходные строки за строкой, которые вы можете сделать:

pdc status -a 2>&1 | grep 'okay' | while read line; do somecommand "$line"; done

Если вам нужен массив, Гленн Джекман уже дал вам это еще один способ:

#!/bin/bash
IFS=$'\n'
array=($(pdc status -a 2>&1 | grep 'okay'))

Объяснение:

$IFS=$'\n': $IFS является разделителем полей ввода bash, \n) гарантирует, что ваши выходные строки не будут разделены на пробелы, чтобы вы могли сохранить каждую строку как отдельный элемент массива. Без этого каждое слово вывода вашей команды будет другим элементом. В зависимости от того, что вы хотите сделать, может быть хорошей идеей сохранить старое значение $IFS и восстановить его после чтения массива:
oldifs="$IFS"
IFS=$'\n'
array=($(echo -e "foo bar\nbaz bar"))
IFS="$oldifs"
$(command): Это называется подстановкой команд и позволяет вам сохранять вывод команды в переменную. Есть два способа сделать это:
var=$(command)
и
var=`command`
. Из двух, $() лучше, потому что: он может иметь дело с вложенными командами:
var=$(command1 $(command 2))
Например var=$(cat $(find ~/)) У него гораздо меньше проблем с цитированием и приводит к более чистому синтаксису. См. Здесь больше.
1
задан 12 October 2016 в 19:32

0 ответов

Другие вопросы по тегам:

Похожие вопросы: