このコマンドはクラスの一部として理解できません。

このコマンドはクラスの一部として理解できません。
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」という変数もあります。

だから私たちは...

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}wc(lines)オプションが格納され-lているファイルの行数を提供する(word count)というプログラムを使用しています。出力$fは次のとおりです57 file1(行数、ファイル名)。

  2. wc -l ${f}| cut -f 1 -d ' '私たちは行数(57)とファイル名ではありません。wc(file1)、IEの出力を取得し、57 file1isolateコマンドの入力として使用します。オペレータは、あるコマンドの出力を取得し、別のコマンドの入力として使用します。このオプションは、フィールドを空白に切り捨てることを指定します。つまり、最初のフィールドを出力するという意味です。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" 

おすすめ記事