所以我有一个练习,我需要计算某个字符串。
例如字符串“|| x ||| + ||”。垂直线代表一个1。所以这个字符串的解需要是8。所以我做了这个脚本:
#!/bin/bash
result=$(echo $1 | tr -d ' ' | sed 's/|/1+/g' | sed 's/++/+/g' | sed 's/+x/x/g' | sed 's/ sed 's/x/*/g' | sed 's/+$//' | sed 's/$/\n/' | bc)
但是当我在字符串示例上执行这个脚本时,我得到的解决方案是 6。 然后我发现这是因为脚本执行了这个:1+1*1+1+1+1+1。所以我需要一种在 (1+1)*(1+1+1)+(1+1) 之间添加括号的方法,但我想不通。
有人能帮帮我吗? 提前致谢!
最佳答案
如果你想坚持使用 sed,那么最好在 做剩下的事情之前加入括号:
result=$(echo $1 | tr -d ' ' | sed -e 's/\(|*\)/(\1)/g' -e 's/|/1+/g' -e 's/+)/)/g' -e 's/x/*/g' | bc)
关于bash - 根据 mathrules 在 bash 脚本中相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33815967/