"Конвейерные" значения в переменные Bash - PullRequest
5 голосов
/ 01 марта 2012

У меня есть скрипт Python, который выводит два числа, например, так: 1.0 2.0 (это пробел между числами, но это может быть \t или что-то еще. Я хочу, чтобы переменная bash сохраняла 1.0 и еще одна переменная для сохранения 2.0. Возможно ли это?

Раньше я только «передавал» одно значение в переменную следующим образом:

var=`python file.py` ;

но теперь я заинтересован в сохранении двух значений из файла python. Концептуально, похоже на:

var1,var2=`python file.py` ; 

Любой совет / помощь?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 01 марта 2012

Вы можете использовать что-то вроде этого:

read var1 var2 < <(python file.py)

Прикольный синтаксис <( ) называется заменой процесса.

1 голос
/ 01 марта 2012

Полагаю, что наиболее эффективной и элегантной вещью здесь будет использование readarray для считывания значения в массив. Конечно, если вы в порядке с использованием массивов. Вы должны быть, но вы никогда не знаете. Однако для этого требуется, чтобы разделитель был переводом строки. Во всяком случае:

readarray -t values < <(python file.py)

Получит массив из одного элемента для каждой строки, выводимой python file.py с удаленным завершающим переводом строки. Проверьте man bash для других вариантов этого очень крутого встроенного.

1 голос
/ 01 марта 2012

Однострочник, который я использую для разделения полей:

 ... | awk '{print $1}' | ... # or $2, $3, etc.

чтобы вы могли сделать

var = `foo`
var1 = `echo "$var" | awk '{print $1}'`
var2 = `echo "$var" | awk '{print $2}'`

edit: добавлены кавычки около $ var

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...