ユーザーが複数のコマンドライン引数を合計するために使用できますが、互換性のない引数も無視する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