Unix下如何在echo语句中加入月份?脚本变量失效问题求助
问题解决:Shell脚本中date命令获取月份变量失效的问题
错误原因
你脚本里的变量赋值存在两处语法问题:
- 变量赋值时等号两边不能有空格,原写法
icmonth= date +"%m"会被Shell解析为执行date +"%m"命令,同时设置临时空变量icmonth,导致最终icmonth实际为空。 - 要捕获命令的输出并赋值给变量,必须使用命令替换语法,即用
$(command)或反引号`command`包裹目标命令。
修正后的脚本
a='boy' icmonth=$(date +"%m") # 用$()捕获date命令输出,等号两侧无空格 for((i=1;i<=31;i++)) do echo "$a$icmonth$i" done
关键说明
$(date +"%m")会执行date +"%m"命令,获取当前月份的两位数字格式结果(如09),并将其赋值给icmonth变量。- 若使用较旧Shell环境,也可以用反引号写法:
icmonth=date +"%m"``,但推荐用$(),可读性更强且支持命令嵌套。
验证效果
执行修正后的脚本,会输出符合预期的内容:
boy091 boy092 boy093 ... boy0931
内容的提问来源于stack exchange,提问作者user234568
相关产品推荐
相关产品推荐

