【问题标题】:(standard_in) 1: syntax error in bash script(standard_in) 1: bash 脚本中的语法错误
【发布时间】:2014-11-25 19:24:41
【问题描述】:

我正在尝试生成一些准随机数以输入蒙特卡罗模拟。我正在使用 bash。我似乎遇到了一个语法错误,我已将其范围缩小到这段代码中。

randno4=($RANDOM % 100001)
upper_limit4=$(echo "scale=10; 1*75.3689"|bc)
lower_limit4=$(echo "scale=10; 1*75.1689"|bc)
range4=$(echo "scale=10; $upper_limit4-$lower_limit4"|bc)
t_twall=`echo "scale=10; ${lower_limit4}+${range4}*${randno3}/100001" |bc`
echo "$t_twall"

有谁知道为什么我在下面的输出而不是 75.3689 和 75.1689 之间的值,因为这是我所期望的?

(standard_in) 1: syntax error

【问题讨论】:

  • randno4=($RANDOM % 100001) 不是算术评估。这将创建一个 randno4='([0]="25649" [1]="%" [2]="100001")' 数组。也许你的意思是randno4='$(($RANDOM % 100001))'
  • 第一行是好的。它只是没有做你认为它做的事情。运行该行,然后运行declare -p randno4。然后尝试echo "$randno4"echo "${randno4[1]}"
  • 我相信这里的实际错误来自bc,因为randno3 错字。
  • bash 手册页解释了RANDOM 的范围。它被记录为“0 到 32767 之间的随机整数”。
  • man command 应该是你学习的第一个 Linux 命令。这是bash man page

标签: bash syntax-error


【解决方案1】:

第一行应该是这样的:

randno4=$((RANDOM % 100001))

(( )) 是 bash 算法,以 $ 开头,值被替换为:$(( ))

你写的时候

randno4=( )

您尝试使用语法错误的算术表达式输入 ARRAY。

http://wiki.bash-hackers.org/syntax/arith_expr

最后,就像Etan Reisner 所说,您还在未定义的 t_twall 分配行中使用 $randno3

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
  • 这对于它所涵盖的内容是正确的(这就是我在评论中涵盖它的原因)但这 不是 实际问题。那就是解决这个问题并不能解决解析错误。解析错误是由于$randno3 错字造成的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
相关资源
最近更新 更多