用默认值(“0”)替换空参数

用默认值(“0”)替换空参数

我有一个查询从数据库返回一些数字,我试图将其放入文件中发送出去。但是,某些值返回为空,我尝试在这些情况下用“0”替换某些计算。我唯一一次可以将其设置为“0”,对于具有实际值的变量也可以这样做。下面是我的代码和输出。我究竟做错了什么? (对于 bash/Linux 来说非常陌生。)

I use these commands:           and I get this output:
echo ${awb-$defaultbase}            NULL
echo ${gachurn-$defaultbase}        2 - 
echo ${awb+$defaultbase}            0
echo ${gachurn+$defaultbase}        0 - 
echo ${awb:-$defaultbase}           NULL
echo ${gachurn:-$defaultbase}       2 - 
echo ${awb:+$defaultbase}           0
echo ${gachurn:+$defaultbase}       0 - 
echo $awb                           NULL
echo $gachurn                       2

我希望第一个值为 0,第二个值为 2。

答案1

NULL从数据库返回的 是一个由四个字符组成的字符串,shell 不会将其解释为“null string”(空字符串)。

要检查是否$awbNULL并将其替换为零,您可以例如这样做

[ "$awb" = 'NULL' ] && awb=0

这比写起来稍微短一些

if [ "$awb" = 'NULL' ]; then
    awb=0
fi

bash,您还可以进行字符串替换,如G-Man建议:

awb=${awb/NULL/0}

答案2

您可以使用"${awb/NULL/0}",它会执行简单的搜索和替换。请注意,这将查找并替换子字符串,因此,如果变量的值为NULL_and_VOID,您将得到0_and_VOID

另请注意,您应该始终引用对 shell 变量的所有引用(如上所示),除非您有充分的理由不这样做,并且您确定您知道自己在做什么。

相关内容