Bashスクリプトで各ファイルのバイトサイズをどのように印刷しますか? [閉鎖]

Bashスクリプトで各ファイルのバイトサイズをどのように印刷しますか? [閉鎖]

私の現在のコードは次のとおりです。

スキャン.sh:

#!/bin/bash
while IFS= read -r line;
do
    byte = $(stat -c%s "$line");
    echo "$line : $byte";
done< <(ls *.$1)

出力は次のとおりです。

./scan.sh cpp
./scan.sh: line 4: byte: command not found
arraysum.cpp :
./scan.sh: line 4: byte: command not found
countLines.cpp :
./scan.sh: line 4: byte: command not found
createtext.cpp :
./scan.sh: line 4: byte: command not found
multiproc1.cpp :
./scan.sh: line 4: byte: command not found
myWc.cpp :
./scan.sh: line 4: byte: command not found
test.cpp :

デフォルトでは、私のコードは構文を使用し、その構文に基づいてディレクトリを検索します。問題は、「ファイル名」+「ファイルバイトサイズ」を印刷したいのですが、正しく機能しないようです。

ベストアンサー1

Bourneのシェルに似た構文では、bashシンボル割り当ての周りにスペースを含めることはできません=

byte=value

しかし、ここで解析された出力lsは悪い考えです。

次のように書くことができます。

#! /bin/sh -
stat -c '%n: %s' -- *."$1"

ループが本当に必要な場合は、次のように書きます。

#! /bin/zsh -
for file in *.$1; do
  stat -c '%n: %s' -- $file
done

または、以下を使用する必要がある場合bash

#! /bin/bash -
shopt -s failglob
for file in *."$1"; do
  stat -c '%n: %s' -- "$file"
done

おすすめ記事