gpt4 book ai didi

linux - bash 中的复活节计算产生恒定的结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:58 25 4
gpt4 key购买 nike

所以基本上我的复活节计算器有这个问题,它是一个 bash 脚本,我已经在 shellcheck 上检查过但几乎没有运气,这是代码:

#!/shell/bash

read -r -p year
Am19=$((year% 19))
m19=$((19*(Am19)))
Am4=$((year%7))
m4=$((19*(Am4)))
Am2=$((year%4))
m2=$((2*(Am2)))
Av2=$((16+(m19)))
v2=$((Av2%30))
Av1=$((6*(v2)+m4+m2))
v1=$((Av1%7))
p=$((v1+v2))
echo "$p"

一切看起来都很好,但每次我输入一个数字时,结果总是 21我无法发现任何问题,我们将不胜感激。

最佳答案

非常有趣的问题,尤其是自 shellcheck 以来没有指出问题。问题出在第一行

 read -r -p year

这里的year不是变量名,而是给-p的提示符(要打印的文字串)。来自 help read(缩略版):

read [-r] [-p prompt] [name ...]
If no NAMEs are supplied, the line read is stored in the REPLY variable.

用户输入的字符串存储在变量REPLY中,而不是year。变量 year 保持未设置状态,并将在类似 ((…)) 的算术上下文中扩展为 0

使用read -r -p year year解决问题,甚至更好

read -r -p 'enter a year: ' year

进一步改进

  • #!/shell/bash 真的正确吗?我从未听说过使用这种路径的系统。我希望 /bin/bash

  • 您可以在 ((…)) 中进行赋值,不需要子 shell。写 ((a=b+c)) 而不是 a=$((b+c))

关于linux - bash 中的复活节计算产生恒定的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56461923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com