bash - 语法错误意外的令牌 bash 脚本
问题描述
我在我的 bash 脚本中遇到了一些这样的错误。我是语言新手。任何指针?
#!/bin/bash
echo "Calculating the value V for all given values"
inflation=(0 0.03 0.05)
tax_rate=(0 0.28 0.35)
for I in inflation
do
for R in tax_rate
do
V=(4000*((1+0.07*(1-R))/(1+I))^10)
echo -n "$V "
done
done
这是我的输出:
计算所有给定值的值 V ./investment.sh:第 9 行:意外标记附近的语法错误('
./investment.sh: line 9:
V=(4000*((1+0.07*(1-R))/(1+I))^10)' ./investment.sh:第 12 行:意外标记done'
./investment.sh: line 12:
完成附近的语法错误
解决方案
- 总是测试你的代码到https://shellcheck.net的错误(你有太多的
do
语句) bash
无法自行计算浮点数,请改用bc [ 1]- 做算术替换,使用
$(( ))
- 做算术,不用算术替换,使用
(( ))
形式 - UPPER CASE 变量为系统保留,最好使用小写
inflation=(0 0.03 0.05)
是一个数组,你可以通过"${inflation[@]}"
- 引用变量![2]
[1] 公元前
bc <<< "scale=2; (4000*((1+0.07*(1-$r))/(1+$i))^10)"
[2] 学习如何在 shell 中正确引用,这很重要:
“双引号”每个包含空格/元字符和每个扩展的文字:
"$var"
,"$(command "$var")"
,"${array[@]}"
,"a & b"
. 用于'single quotes'
代码或文字$'s: 'Costs $5 US'
,ssh host 'echo "$HOSTNAME"'
. 见
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words
命令替换: "$(cmd "foo bar")" 导致命令 'cmd' 使用参数 'foo bar' 执行,并且 "$(..)" 将被替换为输出。请参阅http://mywiki.wooledge.org/BashFAQ/002和http://mywiki.wooledge.org/CommandSubstitution
$((...))
是算术代换。完成算术运算后,整个事情都被表达式的值所取代。见http://mywiki.wooledge.org/ArithmeticExpression
((...))
是一个算术命令,如果表达式非零,则返回退出状态 0,如果表达式为零,则返回 1。如果需要副作用(分配),也用作“让”的同义词。
最后
#!/bin/bash
echo "Calculating the value v for all given values"
inflation=(0 0.03 0.05)
tax_rate=(0 0.28 0.35)
for i in "${inflation[@]}"; do
for r in "${tax_rate[@]}"; do
v="$(bc <<< "scale=2; (4000*((1+0.07*(1-$r))/(1+$i))^10)")"
echo -n "$v "
done
done
echo
输出
Calculating the value v for all given values
7840.00 6480.00 5920.00 5360.00 4400.00 4000.00 4400.00 4000.00 3600.00
推荐阅读
- python - Numpy 沿轴卷积 2 个二维数组
- javascript - 处理 javascript fetch 中的服务器端错误
- python - 从python中的多级(抓取)复杂结构json文件中提取密钥
- javascript - 在 React Table 中动态更改列标题名称
- acumatica - Acumatica - 处理页面上文本框的 PXGridColumn 属性
- python - 如何根据已知直线分割 OpenCV 轮廓?
- android - 为什么由服务制作的自定义视图没有 Decorview?
- powershell - Pscustomobject 添加动态值
- amazon-web-services - AWS Glue 中数据源的 JDBC 连接
- android-studio - 如何在 XML(Android Studio)的文本视图中仅使某些单词变为粗体?