On Sat, Apr 18, 2020 at 2:22 AM Kevin 'ldir' Darbyshire-Bryant
<[email protected]> wrote:
>
>
>
> > On 18 Apr 2020, at 01:56, Rosen Penev <[email protected]> wrote:
> >
> > On Fri, Apr 17, 2020 at 1:50 AM <[email protected]> wrote:
> >>
> >>>
> >>> -     [ $log_buffer_size -eq 0 -a $log_size -gt 0 ] &&
> >>> log_buffer_size=$log_size
> >>> -     [ $log_buffer_size -eq 0 ] && log_buffer_size=64
> >>> +     [ "$log_buffer_size" -eq 0 ] && [ "$log_size" -gt 0 ] &&
> >>
> >> I'm never sure whether a comparison [ "$string" -eq 0 ], i.e. one with 
> >> quotes and one without using -eq works as expected in all cases.
> >> I typically use [ "$string" = "0" ] instead, but I'm not sure whether 
> >> that's effectively just the same.
> > Sounds bogus. log_buffer_size and log_size are stated to be uintegers above.
> >>
> >> Rest seems fine, despite some similar cases with -eq/-ne below.
> > -eq/-ne vs = is a stylistic difference.
>
> I disagree.  ‘= != < >’ are string comparisons, -eq/-ne/gt/lt/ge/le are 
> numeric/arithmetic comparisons.
These are not strings. These are integers.

I did as was asked and shellcheck now complains:

SC2071: > is for string comparisons. Use -gt instead.
>
> Consider this slightly contrived case where to emphasise the difference 
> between string and numeric comparison I compare to ’00’ which is 
> arithmetically zero, but not just a simple, lone ‘0’ string.
>
> #!/bin/sh
>
> set -x
>
> [ "$foo" -eq 00 ] && echo Z
> [ "$foo" = 00 ] && echo Z
> [ $foo -eq 00 ] && echo Z
> [ $foo = 00 ] && echo Z
>
> foo=“0"
> [ "$foo" -eq 00 ] && echo Z
> [ "$foo" = 00 ] && echo Z
> [ $foo -eq 00 ] && echo Z
> [ $foo = 00 ] && echo Z
>
> foo=0
> [ "$foo" -eq 00 ] && echo Z
> [ "$foo" = 00 ] && echo Z
> [ $foo -eq 00 ] && echo Z
> [ $foo = 00 ] && echo Z
>
> The unquoted expansions of $foo in the first block will lead to unknown 
> operand errors since $foo expands to nothing.  The quoted $foo in the first 
> block will lead to ’sh: out of range’ because “” is not an integer suitable 
> for the integer -eq comparison.  A solution:
>
> [ "$foo" ] && [ "$foo" -eq 00 ] && echo Z
>
> In later blocks, because $foo is now set it always expands to something so 
> there’s no difference between quoted vs unquoted behaviour (in this example!) 
>  we’re just into the differences between string vs numeric value comparisons, 
> ie. string ‘0’ is not equal to ’00’ but value ‘0’ is equal to ’00'
>
> Maybe that helps.
>
>
> _______________________________________________
> openwrt-devel mailing list
> [email protected]
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to