bash - 为什么我的 bash 脚本无法识别 date 命令中的变量?
问题描述
如果我在 bash 脚本的函数中执行此行,它将成功运行:
function myFnc(){
...
variable1=$(date -d 2021-01-01 +%W)
...
}
但是,如果我通过运行将“2021”作为输入参数传递
myBash.sh '2021'
如果我将年份替换为相应的变量,则会收到错误“日期:日期无效 #-01-01”:
function myFnc(){
...
variable1=$(date -d $1-01-01 +%W)
...
}
同样使用引号也无济于事:
function myFnc(){
...
variable1=$(date -d "$1-01-01" +%W)
...
}
关于如何解决它的任何想法?提前致谢!
解决方案
bash 中的函数有自己的参数列表。因此,他们无权访问脚本的参数列表。
您需要将参数传递给函数:
#!/bin/bash
# test.sh
myFnc() {
variable1=$(date -d "${1}"-01-01 +%W)
echo "${variable1}"
}
myFnc "${1}"
现在像这样调用脚本:
bash test.sh 2021
注意:function
bash 中的关键字没有作用。它只是使脚本不必要地与 POSIX 不兼容。因此我建议不要使用它。
推荐阅读
- dart - 颤振Bloc重建/监听/重新绘制“触发器”的问题
- php - PHP中的非法字符串偏移警告
- php - mPDF 每次都需要 4 分钟来执行 WriteHTML()
- gulp - 运行 gulp watch 时无限循环
- ios - 如何修复 2 个 ViewController 之间的通过日期
- javascript - Android webview 中的 JavaScript 注入
- spring - 在条件 Bean 上使用 @Value
- typescript - 打字稿检查对象是否匹配类型
- java - 阻止 Spring Boot 应用程序关闭,直到所有当前请求都完成
- angular - Angular 找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Arrays