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
.