Bash局部变量不会被覆盖

时间:2019-09-12 12:21:16

标签: bash command-line local

我正在尝试创建一个使用2个命令行参数的简单bash函数。 -v表示详细程度,-d表示日期。

我想使用冗长的false作为默认值,而今天的日期作为-d的默认值。

现在,如果我提供其他实际值,则默认值不会被覆盖。这是示例输出:

$ cruns -v -d 2019-09-10
2019-09-12
false
if check
test false

日期输出应为9月。而不是第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情况下,我需要更改什么以使变量被提供的命令行参数填充?

1 个答案:

答案 0 :(得分:2)

分配给变量名,而不是它的值。 因此是VERBOSE=trueSTARTDATE=$OPTARG

case $option
in
v) VERBOSE=true
   ;;

d) STARTDATE=$OPTARG
   ;;
esac

另外,由于您似乎正在使用Shell中的crun命令,因此需要将包含source定义的文件cruns放入当前shell中。

source cruns.sh