如何在Bash脚本中将格式化日期结果赋值给变量
报错原因
Shell变量赋值时,若要捕获命令的输出结果存入变量,必须使用命令替换语法。你写的mo=date --date="$(date +%Y-%m-1)-1 month" +%b不符合语法规则:Shell会将mo=date识别为「临时给变量mo赋值为date」,然后把后面的--date=...片段当成要执行的命令名,自然会抛出找不到命令的错误。
正确赋值写法
两种写法均兼容ksh环境:
- 可读性更好的
$()语法(推荐):
mo=$(date --date="$(date +%Y-%m-1) -1 month" +%b)
- 兼容极老Shell版本的反引号语法:
mo=`date --date="$(date +%Y-%m-1) -1 month" +%b`
语法注意点
- Shell变量赋值的
=两侧不能加空格,一旦加空格,Shell会把等号前的内容识别为命令名,触发同类报错。 - 赋值完成后可以用
echo $mo验证结果,正常会输出上个月的月份缩写(比如当前为6月时输出May)。 - 如果后续脚本需要在macOS等BSD系统运行,系统自带date命令不支持
--date参数,可替换为BSD date兼容写法mo=$(date -v-1m +%b)。
内容的提问来源于stack exchange,提问作者jess
相关产品推荐
相关产品推荐

