bash - if语句中的bash函数返回不起作用
问题描述
我正在尝试重构此代码:
if [ $(($1 % 4)) -eq 0 ] && [ $(($1 % 100)) -ne 0 ] || [ $(($1 % 400)) -eq 0 ] ; then
echo $T
else
echo $F
fi
变成这样的东西:
if divisibleBy4 && notDivisibleBy100 || divisibleBy400; then
echo $T
else
echo $F
fi
注意
T="true"
F="false"
divisibleBy4 函数如下所示:
divisibleBy4() {
return [ $(($1 % 4)) -eq 0 ]
}
但是我已经尝试了几次迭代,包括我认为肯定会起作用的方法。
divisibleBy4() {
if [ $(($1 % 4)) -eq 0 ]; then
return 1
else return 0
fi
}
知道如何正确修复语法,以便我可以将它们重构为函数并在我的 if 语句中使用它们吗?
测试时我看到错误
语法错误:预期操作数(错误标记为“% 4”)
我尝试过的另一件事是,但似乎仍然不起作用:
INPUT=$1
divisibleBy4() {
if [ $(($INPUT % 4)) -eq 0 ]; then
return 1
else return 0
fi
}
notDivisibleBy100() {
if [ $(($INPUT % 100)) -ne 0]; then
return 1
else return 0
fi
}
divisibleBy400() {
if [ $(($INPUT % 400)) -eq 0 ]; then
return 1
else return 0
fi
}
if divisibleBy4 && notDivisibleBy100 || divisibleBy400; then
echo $T
else
echo $F
fi
或者
INPUT=$1
divisibleBy4() {
return $((!($INPUT %4)))
}
notDivisibleBy100() {
return $(($INPUT %100))
}
divisibleBy400() {
return $((!($INPUT %400)))
}
(( divisibleBy4 && notDivisibleBy100 || divisibleBy400 )) && echo "true" || echo "false"
解决方案
您想检测闰年!直接使用数学模式的完整其他解决方案:
a="$1"; (( !(a%4) && a%100 || !(a%400) )) && echo true || echo false
或者好像-那么-否则
a="$1";
if (( !(a%4) && a%100 || !(a%400) )); then
echo true
else
echo false
推荐阅读
- html - 如何在手机屏幕上更改网站项目的顺序
- docker - docker-compose 容器之间的连接
- google-api - 如何在 Google Photos API 中为媒体项目添加定位丰富?
- javascript - Javascript - 当值为...时更改表格中的文本颜色
- node.js - 将 Node.js 与 React 连接起来
- python - 我不断收到错误名称'y_test'未定义
- sql - Laravel 模型在托管后使用 id = 0 创建
- c - execvp() 不会加载文件:“没有这样的文件或目录”
- r - 从 geom_smooth 中自动排除特定区域
- php - php中preg_replace()函数是如何工作的?