複数のコマンドライン引数を合計するbashスクリプトを作成する方法は?

複数のコマンドライン引数を合計するbashスクリプトを作成する方法は?

ユーザーがコマンドライン引数の合計を計算するために使用できるbashスクリプトをどのように生成しますか?たとえば、私のスクリプトがsumであるとします。

sum 3

サム

sum 3 5

8

sum 9 8 21

38

ちょっと待ってください. 2番目のコマンドライン引数を特定の変数に参照する方法、またはコマンドライン引数の総数を取得する方法がわかりません。

ベストアンサー1

いいえbash。一般shも使用できます。

#! /bin/sh -
IFS=+; echo "$(($*))"

$*$IFSPOSIXシェルは、最初の文字($IFS未設定の場合は空白、空の場合はnull)で区切られた位置引数(この場合はスクリプトの引数)のリストに展開されます$IFS$((...))シェルの内部算術拡散演算子です(10進数、8進数、16進数をサポートします)。

浮動小数点サポートが必要な場合は、以下を使用することもできますが、ksh93zsh整数算術bash以上の機能をサポートする)などの他のシェルが必要です。bashawk

#! /usr/bin/awk -f
BEGIN {t=0; for (i in ARGV) t+=ARGV[i]; print t}

longこれは(整数の場合)実装されたシステムとdouble(浮動小数点の場合)型の数値を使用します。入力した数字は、10進数浮動小数点または英国工学表記法でなければなりません(浮動小数点区切り記号は次のとおりです)。期間ロケールに関係なく文字)。一部の実装では、最初の数字が負の数であれば、それをオプションとして解釈しようとするawkため失敗します。awk

POSIXLY_CORRECTが環境に存在する場合、いくつかのawk実装(GNUなど)は、バイナリ指数表記法を含む16進数もサポートします。awkまたは--non-decimal-data8進数と16進数を理解するを使用してください。

$ POSIXLY_CORRECT=1 ./sum  0xap3 0xa
90 # (0xa * 2^3) + 0xa
$ awk --non-decimal-data -f ./sum  010
8

おすすめ記事