数値リストをコマンドライン引数として使用し、その数値の合計を出力するBashスクリプトを作成しようとしています。
したがって、スクリプトが実行されたscript.sh 1 555 22 122 66
後、すべてが要約されます。変数に渡してループを実行する必要があることを知っていますが、数学を実行するためにコンテンツをintに$@
変換する方法を理解していません。$@
私はこれを試みます:
#!/bin/bash
for i in $@
do
$@+$@
echo "the total is `$@`"
done
ベストアンサー1
通常、算術$((...))
拡張に引数を使用すると、自動的に整数に変換されます。このループはすべてのパラメータを合計します。
for x; do sum=$((sum+x)); done; echo "$sum"
acプログラムがargv []配列を処理すると、シェルはすべての引数を別々のメモリ位置にキャッシュします。シェルユーザーは配列を直接処理する必要はなく、シェルはそれを$ 1、$ 2、$ 3などに割り当てて助けます。シェルは「$@」などのリストも抽象化します。最後に、構文はすべての引数を繰り返す略語ですfor x
。for x in "$@"
引数が0で始まらない10進数、0で始まる8進数、またはで始まる16進数0x
で、合計がオーバーフローしないとします(64ビットシステムでは2 ^ 63-1)。
このリスト:
$ ./script 12 021 0xab
印刷されます200
(小数点結果)。