私の現在のコードは次のとおりです。
スキャン.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