Bash局部变量未被覆盖

Bash局部变量未被覆盖,bash,command-line,local,Bash,Command Line,Local,我试图创建一个简单的bash函数,它使用2个命令行参数-v表示冗长,d表示日期 我想使用verbosity false作为-d的默认值,使用todays date作为-d的默认值 现在,如果我提供实际的其他值,我的默认值不会被覆盖。以下是一个示例输出: $ cruns -v -d 2019-09-10 2019-09-12 false if check test false 输出的日期应该是9月10日,而不是12日 这是我的代码: 编辑:我修复了变量赋值$,但输出仍然不使用我提供的参数 cru

我试图创建一个简单的bash函数,它使用2个命令行参数-v表示冗长,d表示日期

我想使用verbosity false作为-d的默认值,使用todays date作为-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案例中,我需要更改什么才能使变量填充所提供的命令行参数?

指定给变量名,而不是它的值。 所以它是
VERBOSE=true
STARTDATE=$OPTARG

case $option
in
v) VERBOSE=true
   ;;

d) STARTDATE=$OPTARG
   ;;
esac
另外,由于您似乎正在使用shell中的crun命令,因此需要将包含
crun
定义的文件
source
放入当前shell中


source cruns.sh

分配给变量名,而不是它的值。 所以它是
VERBOSE=true
STARTDATE=$OPTARG

case $option
in
v) VERBOSE=true
   ;;

d) STARTDATE=$OPTARG
   ;;
esac
另外,由于您似乎正在使用shell中的crun命令,因此需要将包含
crun
定义的文件
source
放入当前shell中


source cruns.sh

bash变量赋值永远不要在等式左侧使用“$”可能重复的。这里最关键的一点是,您必须使
optin
local,否则
getopts
会变得非常混乱。此外,我建议对您自己的东西使用小写或混合大小写变量(例如,
verbose
而不是
verbose
),以避免与具有特殊含义的manu-all-caps变量混淆。bash变量赋值永远不要在等式的左侧使用“$”可能重复的。这里最关键的一点是,您必须使
optin
local,否则
getopts
会变得非常混乱。此外,我建议对您自己的东西使用小写或混合大小写变量(例如,
verbose
而不是
verbose
),以避免与具有特殊含义的manu all caps变量混淆。这并没有解决它,我仍然得到与以前相同的输出。是因为我使用了局部变量吗?你是在函数外使用这些变量吗?如果是,请删除本地声明。不,我不会将它们用于任何其他用途。我只在函数中声明它们,如果给定了参数,我想重新分配它们的值,并在2行之后在相同的函数中使用它们。请参阅更新的帖子,
source
-这有帮助吗?在更改后,我确实/确实为文件(my.bashrc)提供了源代码。虽然输出没有改变,但这并没有解决它,我仍然得到和以前一样的输出。是因为我使用了局部变量吗?你是在函数外使用这些变量吗?如果是,请删除本地声明。不,我不会将它们用于任何其他用途。我只在函数中声明它们,如果给定了参数,我想重新分配它们的值,并在2行之后在相同的函数中使用它们。请参阅更新的帖子,
source
-这有帮助吗?在更改后,我确实/确实为文件(my.bashrc)提供了源代码。但产量没有变化。