Bash局部变量未被覆盖
我试图创建一个简单的bash函数,它使用2个命令行参数-v表示冗长,d表示日期 我想使用verbosity false作为-d的默认值,使用todays date作为-d的默认值 现在,如果我提供实际的其他值,我的默认值不会被覆盖。以下是一个示例输出: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
$ 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)提供了源代码。但产量没有变化。