この Bash スクリプトがあり、16 行目に問題がありました。15 行目の前の結果を取得して、16 行目の変数に追加するにはどうすればよいですか?
#!/bin/bash
num=0
metab=0
for ((i=1; i<=2; i++)); do
for j in `ls output-$i-*`; do
echo "$j"
metab=$(cat $j|grep EndBuffer|awk '{sum+=$2} END { print sum/120}') (line15)
num= $num + $metab (line16)
done
echo "$num"
done
ベストアンサー1
整数の場合:
使用算術拡張:
$((EXPR))
num=$((num1 + num2)) num=$(($num1 + $num2)) # Also works num=$((num1 + 2 + 3)) # ... num=$[num1+num2] # Old, deprecated arithmetic expression syntax
外部
expr
ユーティリティを使用します。これは非常に古いシステムにのみ必要であることに注意してください。num=`expr $num1 + $num2` # Whitespace for expr is important
浮動小数点の場合:
Bash はこれを直接サポートしていませんが、使用できる外部ツールがいくつかあります。
num=$(awk "BEGIN {print $num1+$num2; exit}")
num=$(python -c "print $num1+$num2")
num=$(perl -e "print $num1+$num2")
num=$(echo $num1 + $num2 | bc) # Whitespace for echo is important
科学的記数法 (例: 2.5e+2
) を使用することもできます。
よくある落とし穴:
変数を設定するときは、 の両側に空白を入れることはできません
=
。そうしないと、シェルは最初の単語を実行するアプリケーションの名前として解釈することになります(たとえば、num=
またはnum
)。num= 1
num =2
bc
expr
それぞれの数値と演算子は別々の引数として想定されるため、空白が重要になります。 のような引数は処理できません3+
+4
。num=`expr $num1+ $num2`