所以基本上我的复活节计算器遇到了这个问题,它是我在shellcheck上检查过的bash脚本,但是运气很小甚至没有运气,这是代码:
#!/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 我找不到任何问题,我们将不胜感激。
答案 0 :(得分:5)
非常有趣的问题,尤其是因为shellcheck并未指出问题。问题出在第一行
read -r -p year
这里year
不是变量名,而是给-p
的提示(要打印的文字字符串)。来自help read
(简化版):
read [-r] [-p prompt] [name ...]
如果未提供任何名称,则将读取的行存储在REPLY
变量中。
用户输入的字符串存储在变量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))
。