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

为什么我的bash脚本中date命令无法识别传入的年份变量?

问题根因

Bash 中函数的位置参数和脚本全局的位置参数完全独立,互不干扰:

  • 函数内写的$1,默认指向调用该函数时传入的第一个参数,而非执行脚本时传给脚本文件的第一个参数
  • 你没有给myFnc传参就直接调用的话,函数内的$1是空值,拼接后得到的日期字符串为-01-01,属于非法日期格式,因此触发date命令报错,报错信息中的#就是空值的显示占位。
解决方案

两种常用的修复方式:

方式1:调用函数时传入脚本参数

在脚本全局调用myFnc的位置,把脚本接收的年份参数传给函数即可,你写的函数内加引号的逻辑不需要改动:

# 脚本全局调用函数的位置,把脚本的$1传给函数
myFnc "$1"

# 函数原有逻辑保持不变即可
function myFnc(){
...
variable1=$(date -d "$1-01-01" +%W)
...
}

方式2:函数内使用全局变量存储的入参

如果不想修改函数调用逻辑,可以先把脚本接收的参数存入全局变量,函数内直接调用该全局变量即可,推荐用${变量名}的写法明确变量边界,避免拼接歧义:

# 脚本开头先把传入的年份存为全局变量
input_year="$1"

function myFnc(){
...
variable1=$(date -d "${input_year}-01-01" +%W)
...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:15:00