フォルダに含まれる多数のファイルの行サイズを累積したい。次のスクリプトを書きました。
let a=0
let num=0
for i in folder/*
do
num=`cat $i | wc -l`
a=$a+$num
done
echo $a
スクリプトの最後に取得するのは123 + 234 + 432 + ...であり、加算の算術演算の結果ではありません。
算術評価の構文が間違っています。次のいずれかを使用します(1つ目は非常に移植可能ですが低速です。2つ目はPOSIXであり、ボーンシェルと以前のバージョンのAlmquistシェルを除いて移植可能です。最後の3つはksh
、bash
が必要ですまたはzsh
):
a=`expr "$a" + "$num"`
a=$(($a+$num))
((a=a+num))
let a=a+num
((a+=num))
または、for
ループ全体をスキップして、次のようにすることもできます。
wc -l folder/*
または、合計のみが必要な場合:
cat folder/* | wc -l
またはzshとそのmult_ios
オプション:
wc -l < folder/*
このコードを使用することもできます
a=`expr $a + $num`
echo $a
およびそこにあることを確認IS「$ a + $ num」内の両方の側のスペース
最初に変数の型を宣言できます:
declare -i a=0
declare -i num=0
答えはシェルで指定する必要があり、コードは有効です。たとえば、Bourne Shell(sh
)では、次の指示のみが有効です。
a=$((a+num))
a=$(($a+$num))
@manatworkにリストされている他の可能性は、ボーンでも有効である可能性がありますシェル(bash
)
以前の編集は別の投稿用でした。ここでは、元のスクリプトを少し変更しただけです。
let a = 0 let num = 0 for i in folder /* do num = `cat $ i | wc -l` a = $(echo $ a + $ num | bc) done echo $ a