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


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в текущем каталоге (содержащий номер и новую строку).


или обратно процитировать команду: 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и т.д.). Так что, если вы используете $(…)ваш скрипт, он всегда будет продолжаться, тогда как при перенаправлении его можно настроить как сбой. (что может быть, что вы хотите, или нет).
Гаррет Моцнер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.