我有以下命令:
num_lines="$(wc -l "$HOME/my_bash_history")"
哪种产量:
17 /Users/alex/my_bash_history
所以我尝试使用以下方法获取第一个令牌:
local read num_lines < <(wc -l "$HOME/my_bash_history")
但是我得到的只是空结果:
行数:
有人知道为什么吗?
答案 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