无法理解这个命令作为类的一部分

无法理解这个命令作为类的一部分
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 ' ')

让我们解构一下。

  1. wc -l ${f}我们正在使用一个名为 (word count) 的程序,wc其中的-l(lines) 选项为我们提供了存储在其中的文件的行数,$f其输出看起来与此相同57 file1(行数然后文件名)。

  2. wc -l ${f}| cut -f 1 -d ' '因为我们只想要行数 (57) 和不是文件名wc(file1),我们从ie获取输出,并将其用作isolate命令57 file1的输入。运算符获取一个命令的输出并将其用作另一命令的输入。该选项指定我们要按空格剪切字段,表示输出第一个字段,即cut57|-d ' '-f 157

  3. $(wc -l ${f} | cut -f 1 -d ' ')现在我们的命令正在输出57。为了捕获输出以便可以将其分配给ln它,必须将其包装在$()

最后输出“文件号 1 (file1) 有 57 行”

echo "File number ${COUNT} (${f}) has ${ln} lines" 

相关内容