コマンドライン引数の合計?

コマンドライン引数の合計?

ユーザーが複数のコマンドライン引数を合計するために使用できますが、互換性のない引数も無視するbashスクリプトをどのように作成できますか?たとえば、私のスクリプトがsumであるとします。

sum 10 -argument1 -argument2 -argument3 20

30

sum 7 -argument1 2 -argument2 1 -argument3

10

ベストアンサー1

の場合、awk合計と各個別の数値引数がシステムlongタイプに適していると仮定し、オプションの先行記号を-持つ10進数のシーケンスのみを考慮します。

#! /bin/sh -
awk 'BEGIN{
  sum = 0
  for (i = 1; i < ARGC; i++)
    if (ARGV[i] ~ /^-?[0123456789]+$/)
      sum += ARGV[i]
  print sum}' "$@"

任意の精度のために、以下を使用できますbc

#! /bin/sh -
awk 'BEGIN{
  for (i = 1; i < ARGC; i++)
    if (ARGV[i] ~ /^-?[0123456789]+$/)
      print "s+="ARGV[i]
  print "s"}' "$@" | bc

例:

$ ./sum1 999999999999999999999999 1
999999999999999983222784
$ ./sum2 999999999999999999999999 1
1000000000000000000000000

おすすめ記事