如何解决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
一些细节
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=$num
和sed
成为两个不同的命令。它没有按照您希望的方式分组在一起,这使得sed
无效。
此外,您需要echo $num
解决方案是将它们分组在一起,例如:
sum=`echo $num | sed -e 's/-/+/g`
OR
sum=$(echo $num | sed -e 's/-/+/g')
或者,而是另一种方法
sum=${num//-/+}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。