You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将‘YYYY-YYYY’格式的学年两个年份分别减1?

解决学年年份分别减1的问题

你的问题在于直接对带连字符的字符串做减法操作,shell没法识别这种格式的数字运算——它只会把整个字符串当成一个整体,没法拆分出两个年份分别计算。得先拆分年份、分别运算,再重新拼接,下面给几种实用的实现方式:

方法1:用awk(适合管道批量处理)

awk可以直接按连字符拆分字符串,对两个年份分别做减法后拼接:

echo "2020-2021" | awk -F'-' '{print $1-1 "-" $2-1}'
  • -F'-' 指定用连字符作为分隔符,把输入字符串拆成两部分
  • $1 是第一个年份,$1-1 完成减1运算;$2 是第二个年份,同理处理
  • 最后用"-"把两个运算结果拼接输出

方法2:Bash原生处理(适合脚本内变量操作)

如果是在bash脚本里处理变量,不用外部工具也能实现:

# 定义原始学年字符串
school_year="2020-2021"
# 拆分出第一个年份(去掉最后一个-及后面的内容)
first_year=${school_year%-*}
# 拆分出第二个年份(去掉第一个-及前面的内容)
second_year=${school_year#*-}
# 分别减1后拼接成新字符串
new_school_year=$((first_year-1))-$((second_year-1))
# 输出结果
echo $new_school_year
  • ${var%-*} 和 ${var#*-} 是bash的字符串截取语法,专门用来拆分带分隔符的字符串
  • $((...)) 是bash的算术运算语法,直接对数字做减法

方法3:用sed结合bash运算(一行式处理)

sed的e选项可以把替换后的内容当作命令执行,实现一行式处理:

echo "2020-2021" | sed -E 's/([0-9]+)-([0-9]+)/echo $((\1-1))-$((\2-1))/e'
  • -E 启用扩展正则表达式,([0-9]+) 捕获两个年份数字
  • \1 和 \2 对应捕获到的两个年份,分别做减1运算后拼接
  • e 选项让sed执行拼接后的echo命令,输出最终结果

内容的提问来源于stack exchange,提问作者jovlog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 02:20:50