Смотрите на эта страница (раздел "Dependency Version Ranges"). То, что Вы могли бы хотеть сделать, является чем-то как
[1.2.3,)
, Эти диапазоны версии реализованы в Maven2.
В первую очередь, Вам не обязательно нужен массив, для обработки вывода линию за линией можно сделать:
pdc status -a 2>&1 | grep 'okay' | while read line; do somecommand "$line"; done
, Если Вам действительно нужен массив, Glenn Jackman уже дал Вы лучший способ сделать это, но здесь является другим подходом:
#!/bin/bash IFS=
:Объяснение:
\n'
$IFS=:
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом.В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение
$IFS
и восстановить его после того, как массив читается:oldifs="$IFS" IFS=
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:var=$(command)
и
var=`command`
Из этих двух, эти
$()
лучше потому что:
Это может иметь дело с вложенными командами:
var=$(command1 $(command 2))
, Например
var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом.В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение
[112]$IFS
и восстановить его после того, как массив читается:
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
и
[114] Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
[115], Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
var=$(command)
и
var=`command`
Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
var=$(command1 $(command 2))
, Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом. В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение $IFS
и восстановить его после того, как массив читается:
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
и
[114] Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
[115], Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
Объяснение:
$IFS=:
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом.
В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение $IFS
и восстановить его после того, как массив читается:
oldifs="$IFS"
IFS=
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
var=$(command)
и
var=`command`
Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
var=$(command1 $(command 2))
, Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом. В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение $IFS
и восстановить его после того, как массив читается:
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
и
[114] Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
[115], Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
var=$(command)
и
var=`command`
Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
var=$(command1 $(command 2))
, Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
$IFS
удар разделитель поля ввода, устанавливая его на символ новой строки ([только 118]) гарантируют, что Ваши выходные строки не будут разделены на пробеле так, чтобы можно было сохранить каждую строку как элемент отдельного массива. Без этого каждый Word вывода Вашей команды был бы различным элементом. В зависимости от того, что Вы хотите сделать, это могла бы быть хорошая идея сохранить старое значение $IFS
и восстановить его после того, как массив читается:
$(command)
: Это называют замена команды и позволяет Вам сохранять вывод команды в переменной. Существует два способа сделать это:
и
[114] Из этих двух, эти $()
лучше потому что:
Это может иметь дело с вложенными командами:
[115], Например var=$(cat $(find ~/))
Это имеет гораздо меньше проблем с заключением в кавычки и приводит к более чистому синтаксису. См. здесь для больше.
Если Вы просто хотите числа в конце каждой строки:
numbers=( $(pdc ... | grep -oP 'okay.+?\K\d+ , Если Вы хотите сохранить каждую строку в массив
mapfile -t lines < <(pdc ...)
Для получения данных из массивов:
for (( i=0; i<${#numbers[@]}; i++ )); do echo ${numbers[i]}; done
echo
printf "%s\n" "${lines[@]}"
33
22
11
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
) )
, Если Вы хотите сохранить каждую строку в массив
mapfile -t lines < <(pdc ...)
Для получения данных из массивов:
for (( i=0; i<${#numbers[@]}; i++ )); do echo ${numbers[i]}; done
echo
printf "%s\n" "${lines[@]}"
33
22
11
[okay ]: you are currently listening: 33
[okay ]: you are currently listening: 22
[okay ]: you are currently listening: 11
mapfile -t array < <(grep.....)
– UjinT34
17.05.2020, 17:09
Еще один более интуитивный способ использовать readarray
встроенный (см. help -m readarray
):
readarray -t array <<< "$(pdc status -a 2>&1 | grep 'okay')"
затем для печати элемента массива позвольте, говорит второй элемент, можно использовать:
echo "${array[1]}"
Для печати всех элементов массива на отдельных строках можно использовать:
printf -- "%s\n" "${array[@]}"