Зверніть увагу, що ця tr -s ' '
опція не видалить жодного пробілу. Якщо стовпець вирівняний по правому краю (як у ps
pid) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
Тоді вирізання призведе до порожнього рядка для деяких з цих полів, якщо це перший стовпець:
$ <previous command> | cut -d ' ' -f1
19645
19731
Очевидно, якщо ви перед цим не ставите пробіл
$ <command> | sed -e "s/.*/ &/" | tr -s " "
Тепер для цього конкретного випадку номерів pid (а не імен) існує функція, що називається pgrep
:
$ pgrep ssh
Функціонує оболонка
Однак загалом все-таки можливо використовувати функції оболонки стисло, оскільки в команді є акуратна річ read
:
$ <command> | while read a b; do echo $a; done
Перший параметр для читання, a
вибирає перший стовпець, а якщо їх більше, все інше буде введено b
. Як результат, вам ніколи не потрібно більше змінних, ніж номер вашого стовпця +1 .
Тому,
while read a b c d; do echo $c; done
потім виведе 3-й стовпець. Як зазначено в моєму коментарі ...
Зчитування в трубопроводі буде виконано в середовищі, яке не передає змінні викличному сценарію.
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
Рішення масиву
Тоді ми закінчуємо відповіддю @frayser, яка полягає у використанні змінної оболонки IFS, яка за замовчуванням має пробіл, щоб розділити рядок на масив. Це працює лише в Bash. Тире та Еш його не підтримують. Мені було дуже важко розбити рядок на компоненти в Busybox. Досить просто отримати один компонент (наприклад, за допомогою awk), а потім повторити це для кожного потрібного параметра. Але тоді ви в кінцевому підсумку неодноразово викликаєте awk на одному рядку або неодноразово використовуєте блок читання з відлунням на тій самій лінії. Що неефективно чи красиво. Таким чином, ви в кінцевому підсумку розділяєте використання ${name%% *}
і так далі. Змушує вас тужити за деякими навичками Python, адже насправді сценарії оболонки вже не дуже веселі, якщо половина або більше функцій, до яких ви звикли, зникли. Але ви можете припустити, що навіть python не був би встановлений у такій системі, і цього не було ;-).