Bash脚本添加由空格分隔的数字的绝对值

Posted

技术标签:

【中文标题】Bash脚本添加由空格分隔的数字的绝对值【英文标题】:Bash script to add absolute values of numbers seperated by spaces 【发布时间】:2021-12-21 17:50:43 【问题描述】:

我需要一个 bash 脚本来查找由空格分隔的整数的绝对值之和。例如,如果输入是:

1 2 -3

脚本应该将 6 打印到标准输出 我有:

while read x ; do echo $(( $x// /+ )) ; done

这给了我

0

如果没有复杂的事情,我将如何在该语句中包含每个 x 的绝对值,以便输出为:

6

【问题讨论】:

您可以在将空格转换为 + 之前删除所有 - 字符。 【参考方案1】:

您几乎完成了,但-s 必须已从以下行中删除:

while read x; do x=$x//-; echo $(( $x// /+ )); done

【讨论】:

【参考方案2】:

POSIX 友好的实现,无需运行循环且无需生成子 shell:

#!/usr/bin/env sh

abssum() 
  IFS='-'
  set -- $*
  IFS=' '
  set -- $*
  IFS=+
  printf %d\\n $(($*))


abssum 1 2 -3

结果:

6

【讨论】:

【参考方案3】:

巴马尔的想法:

echo "1 2 -3" | tr -d - | tr ' ' '+' | bc -l

输出:

6

【讨论】:

你能用变量而不是硬编码的 1 2 -3 给我看你的例子吗? 1 2 -3 替换为$x

以上是关于Bash脚本添加由空格分隔的数字的绝对值的主要内容,如果未能解决你的问题,请参考以下文章

bash的算术运算和条件测试语句

如何在bash中对逗号分隔的值进行排序?

bash:以空格作为参数传递路径?

Bash 中带有字符、点和数字的正则表达式

bash-read使用方法

bash-read使用方法