从输出中读取第一个令牌

时间:2019-06-05 05:07:45

标签: bash shell

我有以下命令:

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 个答案:

答案 0 :(得分:3)

wc报告文件名,除非正在从stdin中读取。因此,请保持简单,只需使用:

$ 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

或者,像这样使用 here-string

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

read读取一行时,shell首先将这些行拆分为单词。单词依次分配给每个自变量,最后一个自变量接收剩余的内容。在我们的情况下,这意味着将数字分配给num_lines,并将数字后面的所有单词分配给fname

答案 1 :(得分:2)

尝试一下:

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

说明

${num_lines%% *}  # delete all after first blank