wc -l 文件到变量

bry*_*bee 0 shell

给定文件路径,我想找出有多少行并将它们存储到变量中。例如:

/three_little_pigs.csv

straw
wood
bricks
Run Code Online (Sandbox Code Playgroud)

在文件中,我想3存储数字(或字符串)。尝试了以下命令:

export P="three_little_pigs.csv"
NUM_LINES=(wc -l < "${P}")
Run Code Online (Sandbox Code Playgroud)

但我总是收到此错误:

bash: house: line 12: syntax error near unexpected token `<'
Run Code Online (Sandbox Code Playgroud)

Chr*_*phS 5

$(...)在 bash 中运行子shell,请使用。而且您不需要重定向输入,只需命名输入文件即可。所以省略<

NUM_LINES=$(wc -l "$P")
Run Code Online (Sandbox Code Playgroud)

输出:

3 three_little_pigs.csv
Run Code Online (Sandbox Code Playgroud)

要去掉文件名,一种可能性(还有很多其他的)是使用 awk:

NUM_LINES=$(wc -l "$P" | awk '{print $1}')
Run Code Online (Sandbox Code Playgroud)

编辑 1:

好的,使用重定向 ( <) 将完全省略文件名......抱歉;)

NUM_LINES=$(wc -l < "$P")
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在一些 `wc` 实现中,在 `NUM_LINES=$(wc -l &lt;​​ "$P")` 之后,`$NUM_LINES` 将包含前导空格。要丢弃它们,一个常见的技巧是使用算术扩展:`NUM_LINES=$(($(wc -l "$P")))`。这也会将空输出(例如无法打开文件时)转换为“0”。 (2认同)