[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058460001]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe" code00.py
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] 64bit on win32
example.test_field: 147
example.test_field: 123
Done.
我尝试了这段代码,它给出了很多错误,
#!/bin/bash
SubValue()
{
romanvalue="${romanvalue}$2"
decvalue=$(( $decvalue - $1 ))
}
if [ $decvalue -ge 1000 ] ; then
SubValue 1000 "M"
elif [ $decvalue -ge 900 ] ; then
SubValue 900 "CM"
elif [ $decvalue -ge 500 ] ; then
SubValue 500 "D"
elif [ $decvalue -ge 400 ] ; then
SubValue 400 "CD"
elif [ $decvalue -ge 100 ] ; then
SubValue 100 "C"
elif [ $decvalue -ge 90 ] ; then
SubValue 90 "XC"
elif [ $decvalue -ge 50 ] ; then
SubValue 50 "L"
elif [ $decvalue -ge 40 ] ; then
SubValue 40 "XL"
elif [ $decvalue -ge 10 ] ; then
SubValue 10 "X"
elif [ $decvalue -ge 9 ] ; then
SubValue 9 "IX"
elif [ $decvalue -ge 5 ] ; then
SubValue 5 "V"
elif [ $decvalue -ge 4 ] ; then
SubValue 4 "IV"
elif [ $decvalue -ge 1 ] ; then
SubValue 1 "I"
fi
任何人都可以帮助我解决此问题。
答案 0 :(得分:1)
未设置变量decvalue
。
您正在使用双引号之外的变量,那么所有命令[ $decvalue -ge ... ]
都会变成[ -ge ... ]
,从而导致错误。
您可以在#!/bin/bash -xv
行中使用-x(调试)和/或-v(详细)选项来调试脚本。然后,您将看到并了解会发生什么。相反,您还可以调用set -xv
在本地启用调试,然后在要调试的行之后调用set +xv
。
使用双引号,错误消息会更明确:
bash: [: : integer expression expected
答案 1 :(得分:0)
问题中报告的问题根源是syme所述的空白decvalue
。
考虑到脚本的用途,似乎您试图编写一个递归函数。因此,我建议您遵循jww关于调试问题的评论!
此外,建议您在recursive functions in bash的SO上搜索问题。对于bash中的阶乘计算,有很好的答案。
考虑“运输”哪些数量以及最后返回/编译哪些数量。
如果您确实遇到问题,可以在下面找到90%的解决方案。
#!/bin/bash
romanLetters(){
local decvalue=$1
local roman
declare -i decvalue
if [ $decvalue -ge 1000 ]; then
romanvalue="M$(romanLetters $((decvalue - 1000)))"
echo $romanvalue
elif [ $decvalue -ge 900 ]; then
romanvalue="CM$(romanLetters $((decvalue - 900)))"
echo $romanvalue
# ... and so on ...
fi
}
echo "1900: $(romanLetters 1900)"