微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash数学表达式 简而言之:鞭打最后一个斜杠: num="10 20 -30" echo $((${num// /+})) 0 一些细节 一些细节

如何解决Bash数学表达式 简而言之:鞭打最后一个斜杠: num="10 20 -30" echo $((${num// /+})) 0 一些细节 一些细节

我需要帮助,这一直困扰着我。

我读了一个带有整数adb的变量。

全部用空格隔开。我尝试将减号更改为加号并将其保存到另一个变量中,但未保存。如果我无法更改为plus,我想将其删除,那么我可以这样做:

10 20 -30

因此它可以加所有整数。

这就是我所拥有的:

var=$((${num// /+/}))

解决方法

使用标准POSIX变量扩展和算法:

#!/usr/bin/env sh

# Computes the sum of all arguments
sum () {
  # Save the IFS value
  _OIFS=$IFS

  # Set the IFS to + sign
  IFS=+

  # Expand the arguments with the IFS + sign
  # inside an arithmetic expression to get
  # the sum of all arguments.
  echo "$(($*))"

  # Restore the original IFS
  IFS=$_OIFS
}

num='10 20 -30'

# shellcheck disable=SC2086 # Intended word splitting of string into arguments
sum $num

具有join功能的更多精选版本:

#!/usr/bin/env sh

# Join arguments with the provided delimiter character into a string
# $1: The delimiter character
# $@: The arguments to join
join () {
  # Save the IFS value
  _OIFS=$IFS

  # Set the IFS to the delimiter
  IFS=$1

  # Shift out the delimiter from the arguments
  shift

  # Output the joined string
  echo "$*"

  # Restore the original IFS
  IFS=$_OIFS
}

# Computes the sum of all arguments
sum () {
  # Join the arguments with a + sign to form a sum expression
  sum_expr=$(join + "$@")

  # Submit the sum expression to a shell's arithmetic expression
  # shellcheck disable=SC2004 # $sum_expr needs its $ to correctly split terms
  echo "$(($sum_expr))"
}

num='10 20 -30'

# shellcheck disable=SC2086 # Intended word splitting of string into arguments
sum $num
,

简而言之:鞭打最后一个斜杠:
num="10 20 -30"
echo $((${num// /+}))
0

一些细节

* Bash battern替换 与所谓的正则表达式并不相同。正确的语法是:

   ${parameter/pattern/string}

...如果模式以/开头,则模式的所有匹配项都将替换为字符串。 通常只替换第一个比赛。 ...

请参阅:man -Pless\ +/parameter.pattern.string bash

如果您尝试使用语法:

echo ${num// /+/}
10+/20+/-30

然后

echo ${num// /+}
10+20+-30

甚至,要使它漂亮:

echo ${num// / + }
10 + 20 + -30

但是结果将保持不变:

echo $((  ${num// / + }  ))
0
,
sum=$num | sed -e 's/-/+/g'

关于上述内容,sum=$numsed成为两个不同的命令。它没有按照您希望的方式分组在一起,这使得sed无效。

此外,您需要echo $num

解决方案是将它们分组在一起,例如:

sum=`echo $num | sed -e 's/-/+/g`

OR

sum=$(echo $num | sed -e 's/-/+/g')

或者,而是另一种方法

sum=${num//-/+}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。