Як зберігати результати команд у змінних у на сценаріїх оболонок?


74

Я хочу дізнатися кількість каталогів і файлів у домашньому каталозі і хочу зберегти кількість змінних у сценарії оболонки. Я використовую наступний набір команд.

command="ls -l | grep -c \"rahul.*patle\""
eval $command

я хочу зберегти цей підрахунок у деякому варіантному підрахунку. Як я можу це зробити.


вам, мабуть, краще використовувати ls -1(номер один) замість ls -lта grep -cEзалежно від вашої системи?
beroe

Відповіді:


110

Синтаксис для збереження виводу команди у змінну є var=$(command).

Таким чином, ви можете безпосередньо зробити:

result=$(ls -l | grep -c "rahul.*patle")

А змінна $resultміститиме кількість збігів.


Чи можна зберегти змінну, але при цьому зберегти вихід терміналу одночасно?
Лев

@Leo Я не думаю, що це можливо. Напевно, для цього можна використовувати файл-посередник: command | tee tmp_fileа потім var=$(< tmp_file). Це виконує команду; коли teeви бачите це в терміналі, він також зберігається у файлі tmp_file; потім ви читаєте файл у $var.
Fedorqui 'SO prestani шкодити'

1
Я просто зробив це за допомогою додаткової труби tee. result=$(ls -l | tee /dev/tty | grep -c "rahul.*patle")
Лев

@Leo о, це добре! Я щойно запитав про це: Як зберігати вихідні дані команди у змінній одночасно з друком вихідних даних? . Не соромтеся включати туди свій коментар, щоб зробити його загальним посиланням.
Fedorqui 'SO prestani шкодити'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.