Dan*_*395 1 bash shell-script environment-variables regular-expression math
我正在尝试编写一个 Bash 脚本,它将数字列表作为命令行参数,然后输出这些数字的总和。
因此,脚本将按原样运行,script.sh 1 555 22 122 66然后将它们汇总起来。我知道它们需要传递给$@变量,然后可能会运行一个循环,但我不明白如何将 的内容转换为$@int 来进行数学运算。我试图这样做:
#!/bin/bash
for i in $@
do
$@+$@
echo "the total is `$@`"
done
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式完成此操作:
tr ' ' '+' <<<"$@" | bc
Run Code Online (Sandbox Code Playgroud)
它接受所有传递的参数并用+符号替换空格,然后将其通过管道传送到bc.
通常,如果在算术$((...))扩展中使用,参数会自动转换为整数。此循环将对所有参数求和:
for x; do sum=$((sum+x)); done; echo "$sum"
Run Code Online (Sandbox Code Playgroud)
当 ac 程序处理 argv[] 数组时,shell 将所有参数缓存在单独的内存位置。Shell 用户不需要直接处理该数组,Shell 通过将它们分配给 $1、$2、$3 等来提供帮助。Shell 还将此类列表抽象为“$@”。最后,语法for x是for x in "$@"循环所有参数的简写。
假设参数是不以零开头的十进制数、以零开头的八进制数或以 开头的十六进制数0x,并且总和不会溢出(64 位系统中为 2^63-1)
这份清单:
$ ./script 12 021 0xab
Run Code Online (Sandbox Code Playgroud)
将打印200(十进制结果)。
| 归档时间: |
|
| 查看次数: |
1703 次 |
| 最近记录: |