Прочитать первый токен из вывода - PullRequest
1 голос
/ 05 июня 2019

У меня есть эта команда:

num_lines="$(wc -l "$HOME/my_bash_history")"

Который дает:

17 /Users/alex/my_bash_history

Поэтому я попытался получить первый токен с помощью:

local read num_lines < <(wc -l "$HOME/my_bash_history")

Но всеЯ получаю пустой результат:

число строк:

Кто-нибудь знает почему?

Ответы [ 2 ]

3 голосов
/ 05 июня 2019

wc сообщает имя файла , если не читает из стандартного ввода.Итак, сделайте это просто, просто используйте:

$ num_lines="$(wc -l <"$HOME/my_bash_history")"
$ echo "$num_lines"
17

Если вы действительно хотите использовать read с подстановкой процесса , тогда используйте два аргумента для read, например:

$ read num_lines fname < <(wc -l "$HOME/my_bash_history")
$ echo "$num_lines"
17

или используйте здесь-строку следующим образом:

$ read num_lines fname <<<"$(wc -l "$HOME/my_bash_history")"
$ echo "$num_lines"
17

Когда read читает строку, оболочка сначала разбивает строки на слова.Слова присваиваются каждому аргументу по очереди, причем последний аргумент получает то, что осталось.В нашем случае это означает, что номер присваивается num_lines, а любые слова, следующие за номером, присваиваются fname.

2 голосов
/ 05 июня 2019

попробуйте это:

num_lines="$(wc -l $HOME/my_bash_history)"
echo "${num_lines%% *}"

объяснение

${num_lines%% *}  # delete all after first blank
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...