所以基本上我的复活节计算器遇到了这个问题,它是我在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"
Run Code Online (Sandbox Code Playgroud)
一切似乎都很好,但是每次我输入数字时,结果总是出来21我找不到任何问题,我们将不胜感激。
非常有趣的问题,尤其是因为shellcheck并未指出问题。问题在第一行
read -r -p year
Run Code Online (Sandbox Code Playgroud)
这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
Run Code Online (Sandbox Code Playgroud)
是#! /shell/bash真的吗 我从未听说过使用这种路径的系统。我希望/bin/bash。
您可以在内部进行分配((…)),而无需子shell。写((a=b+c))而不是a=$((b+c))。
| 归档时间: |
|
| 查看次数: |
40 次 |
| 最近记录: |