Перенаправить вывод в переменную?

9

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

что я делаю, так это получаю размер файла из каталога, используя команды, показанные ниже:

ls -l /var/spool | wc -c

Эта команда возвращает мне размер файла в байтах и ​​отображает вывод в виде целого числа. Я заинтересован в том, чтобы это целое число было присвоено переменной, которая мне нравится, чтобы потом я мог сравнить ее с другой переменной.

Это не похоже на работу:

size = ls -l /var/spool | wc -c

Будет ли работать перенаправление?

Нравится....

ls -l /var/spool | wc -c > size

В любом случае я хочу, чтобы этот числовой вывод был назначен переменной и не отображался на экране.

Любые предложения очень приветствуются!

Джастин
источник

Ответы:

12

Это кажется довольно простым.

romano@RRyS:~$ size=$(ls -l /var/spool | wc -c)
romano@RRyS:~$ echo $size
476

Синтаксис оболочки $(command)выполняется commandи возвращает стандартный вывод: просто сохраните его в переменной.

Ваша команда:

ls -l /var/spool | wc -c > size 

создаст файл с именем sizeв текущем каталоге (содержащий номер и новую строку).

Rmano
источник
или обратно процитировать команду: size=`ls -l /var/spool | wc -c`. используйте этот формат в своем ответе: "` `size =` ls -l / var / spool | wc -c` `` "без двойных кавычек;)
αғsнιη
1
@KasiyA Я предпочитаю использовать $()по причинам, объясненным здесь: stackoverflow.com/a/9449788/2907484 :-)
Rmano
1
(1) После этого ls -l /var/spool | wc -c > size_fileвы можете read size_var < size_file. (2) См. Также Может ли $ () всегда заменять обратные метки для подстановки команд?
G-Man говорит «Восстановить Монику»
6

Я предпочитаю решение, предложенное ответом Rmano , но если вы хотите использовать только перенаправление:

read size < <(ls -l /var/spool | wc -c)
Раду Рэдяну
источник
1
Основное преимущество использования только переназначения является то , что она не глотает ошибки ( в зависимости от того, как ваш сценарий создан для обработки труб - set -e, set -o pipefailи т.д.). Так что, если вы используете $(…)ваш скрипт, он всегда будет продолжаться, тогда как при перенаправлении его можно настроить как сбой. (что может быть, что вы хотите, или нет).
Гаррет Моцнер