2013-05-01 1 views
-1

Когда я выполнить определенную команду я получить как 2 выходных значений, например:Как сохранить определенный вывод команды переменной в sh?

2.056000 640.640015 

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

Может ли кто-нибудь мне помочь?

ответ

1

Если вы хотите, чтобы переменная содержала результат команды, var=$(command) является решением.

В вашем случае,

your_var=$(your_command | awk '{print $2}') 

Вы должны выполнить команду, а затем конвейер к awk, что получит второй параметр.

+1

Отлично! Большое спасибо ! – Paula

-1

подход Fedorqui это хорошо, но для обеспечения альтернативы:

your_command | read DONT_CARE YOUR_VAR IGNORE_ANYTHING_TRAILING 

Это имеет преимущество, не нуждаясь подбежать подоболочку и AWK. Протестировано и работает для zsh. Вам не нужно беспокоиться о IGNORE_ANYTHING_TRAILING, но затем скажите, что your_command выплюнул 1 2 3 4, YOUR_VAR закончится с «2 3 4».

+0

Хорошая идея. Должен сказать, что базовый '$ ls -l a | читать p' не работал со мной в bash. '$ p' не установлен. – fedorqui

+0

Да ... моя старая оболочка bash в cygwin тоже странная: 'echo 1 | read x' не устанавливает x, 'read -u 0 x' (дескриптор для stdin) не помогает,' cat | read x' не работает, но если я просто 'read x' и введите значения, то это нормально. Труба завинчивает его как-то. Некоторое обсуждение на http://stackoverflow.com/questions/2746553/bash-script-read-values-from-stdin-pipe - какая глупая оболочка! ; -P –

+0

Некоторые оболочки (в частности 'bash') будут выполнять' read' в подоболочке, поэтому переменная недоступна после выхода конвейера. Стандарт POSIX просто говорит, что любая или все команды в конвейере могут выполняться в подоболочке; он не требует какого-либо конкретного поведения. – chepner

 Смежные вопросы

  • Нет связанных вопросов^_^