for f in ${FILES}; do
((COUNT++))
ln=$(wc -l ${f} | cut -f 1 -d ' ')
echo "File number ${COUNT} (${f}) has ${ln} lines"
done
答案1
for f in ${FILES}; do
((COUNT++))
ln=$(wc -l ${f} | cut -f 1 -d ' ')
echo "File number ${COUNT} (${f}) has ${ln} lines"
done
这就是 bash 中 for 循环的样子。对于其中的每个项目,(list)
将项目的值分配给名为的变量f
,然后执行该[...]
部分
for f in (list); do
[...]
done
据推测,有一串由空格分隔的文件名分配给了一个名为FILES
FILES="file1 file2 file3"
要访问变量的内容,例如FILES
,您必须在变量名前添加 $。你可以写$FILES
或者${FILES}
还有一个名为“COUNT”的变量在某处分配为 0,因为上面的代码试图对列出的文件进行计数
所以我们有...
FILES="file1 file2 file3"
COUNT=0
for f in ${FILES}; do
[...]
done
每次为 f 分配一个新值时, [...] 部分都会运行
[...] 部分有什么? 首先我们增加 COUNT 变量。为了使用 COUNT++ 递增(将 COUNT 变量加 1),您需要用 (()) 将算术表达式括起来
((COUNT++))
接下来我们获取每个文件中的行数。
ln=$(wc -l ${f} | cut -f 1 -d ' ')
让我们解构一下。
wc -l ${f}
我们正在使用一个名为 (word count) 的程序,wc
其中的-l
(lines) 选项为我们提供了存储在其中的文件的行数,$f
其输出看起来与此相同57 file1
(行数然后文件名)。wc -l ${f}
| cut -f 1 -d ' '
因为我们只想要行数 (57) 和不是文件名wc
(file1),我们从ie获取输出,并将其用作isolate命令57 file1
的输入。运算符获取一个命令的输出并将其用作另一命令的输入。该选项指定我们要按空格剪切字段,表示输出第一个字段,即cut
57
|
-d ' '
-f 1
57
$(
wc -l ${f} | cut -f 1 -d ' '
)
现在我们的命令正在输出57
。为了捕获输出以便可以将其分配给ln
它,必须将其包装在$()
最后输出“文件号 1 (file1) 有 57 行”
echo "File number ${COUNT} (${f}) has ${ln} lines"