【发布时间】:2020-01-14 07:49:35
【问题描述】:
我正在尝试创建一个使用 2 个命令行参数的简单 bash 函数。 -v 表示详细程度,-d 表示日期。
我想将详细程度 false 作为默认值,并将今天的日期作为 -d 的默认值。
现在,如果我提供实际的其他值,我的默认值不会被覆盖。这是一个示例输出:
$ cruns -v -d 2019-09-10
2019-09-12
false
if check
test false
日期输出应该是 9 月。第 10 次而不是第 12 次。
这是我的代码:
编辑:我修复了变量赋值 $,但输出仍然没有使用我提供的参数。
cruns(){
local VERBOSE=false
local STARTDATE="$(date +"%Y-%m-%d")"
while getopts "vd:" option; do
case $option
in
v) VERBOSE=true
;;
d) STARTDATE=$OPTARG
;;
esac
done
echo $STARTDATE;
echo $VERBOSE;
echo "if check"
if $VERBOSE; then
echo "test true";# cjobs $STARTDATE | awk -F"_AS-|_Und|_all" '{a[$1]++} END{for(x in a){print x}}'
else
echo "test false";# cjobs $STARTDATE | awk -F"__|_AS-|_Und|_all" '{a[$2]++} END{for(x in a){print x}}'
fi
}
编辑:我修复了变量赋值 $,但输出仍然没有使用我提供的参数。 如果这很重要,我将函数存储在我的 bashrc 中,源 bashrc 并从终端调用函数。
在我的 getopts 案例中,我需要进行哪些更改才能使变量填充为提供的命令行参数?
【问题讨论】:
-
bash 变量赋值从不使用等号左侧的 '$'
-
Using getopts inside a Bash function 的可能重复项。这里的关键是你必须让
OPTIND本地化,否则getopts会变得非常混乱。此外,我建议您对自己的事物使用小写或混合大小写变量(例如verbose而不是VERBOSE),以避免与具有特殊含义的 manu 全大写变量混淆。
标签: bash command-line local