Bash脚本报错:arithmetic expression: expecting EOF: "09112022" 求助
解决Bash脚本日期校验的算术表达式错误
问题原因
报错的核心原因是:date +'%d%m%Y'输出的日期字符串如果以0开头(比如日为09、月为09时),Bash在执行算术运算$((...))时,会将以0开头的数字默认解析为八进制数,但八进制的有效数字只有0-7,包含9的数字会触发语法错误,这就是你看到arithmetic expression: expecting EOF: " 09112022 "的原因。
解决方案
方案1:直接字符串对比(推荐)
因为日期格式是固定的ddmmyyyy,直接对比字符串完全能满足校验需求,不需要多余的算术转换,代码更简洁高效:
q2(){ today_now=$(date +'%d%m%Y') echo "$today_now" read x if [[ "$today_now" == "$x" ]] then echo "valid" else echo "invalid" fi }
方案2:强制十进制解析(保留算术运算场景)
如果一定要用算术比较,可在变量前添加10#,强制Bash按十进制解析数字,避免八进制解析错误:
q2(){ today_now=$(date +'%d%m%Y') echo "$today_now" a=$((10#$today_now)) read x b=$((10#$x)) if [[ "$a" -eq "$b" ]] then echo "valid" else echo "invalid" fi }
内容的提问来源于stack exchange,提问作者manish chary
相关产品推荐
相关产品推荐

