UNIX中替换变量为字符串截取逻辑时date命令报错求助
问题排查:UNIX脚本中date命令报错"extra operand '+%s'"
场景描述
在UNIX环境中运行以下脚本时一切正常,能正确输出目标时间格式:
UOW="20251013115437" echo ${UOW} UOW_STR=${UOW:0:4}"-"${UOW:4:2}"-"${UOW:6:2}" "${UOW:8:2}":"${UOW:10:2}":"${UOW:12:2} echo ${UOW_STR} UOW_IN_AFTERVAL=$(printf '%(%FT%T%z)T\n' $(TZ=UTC date -d "${UOW_STR}" +%s)) echo ${UOW_IN_AFTERVAL}
输出结果:2025-10-13T07:54:37-0400
但将语句中的UOW_STR直接替换为字符串截取逻辑后,脚本报错:
UOW_IN_AFTERVAL=$(printf '%(%FT%T%z)T\n' $(TZ=UTC date -d "${UOW:0:4}/"-/"${UOW:4:2}/"-/"${UOW:6:2}/" /"${UOW:8:2}/":/"${UOW:10:2}/":/"${UOW:12:2}" +%s))
错误信息:
date: extra operand ‘+%s’
错误原因
字符串拼接语法存在严重错误:
- 多余的斜杠
/和错误的引号嵌套,导致date命令的日期参数被拆分成多个独立片段 - 原本应作为整体的日期字符串被拆成多个参数,
+%s因此被当成date命令的额外操作数,而非格式化选项
解决方案
修正字符串拼接逻辑,直接用正确字符连接截取片段,移除多余的斜杠和错误引号:
UOW="20251013115437" UOW_IN_AFTERVAL=$(printf '%(%FT%T%z)T\n' $(TZ=UTC date -d "${UOW:0:4}-${UOW:4:2}-${UOW:6:2} ${UOW:8:2}:${UOW:10:2}:${UOW:12:2}" +%s)) echo ${UOW_IN_AFTERVAL}
验证结果
运行修正后的脚本,会正确输出:2025-10-13T07:54:37-0400
内容的提问来源于stack exchange,提问作者sourav shetty
相关产品推荐
相关产品推荐

