我有一个查询从数据库返回一些数字,我试图将其放入文件中发送出去。但是,某些值返回为空,我尝试在这些情况下用“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”(空字符串)。
要检查是否$awb
为NULL
并将其替换为零,您可以例如这样做
[ "$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 变量的所有引用(如上所示),除非您有充分的理由不这样做,并且您确定您知道自己在做什么。