How do I do if statement arithmetic in bash?

后端 未结 5 2011
感情败类
感情败类 2020-12-04 11:16

I want to do something like this:

if [ $1 % 4 == 0 ]; then
...

But this does not work.

What do I need to do instead?

5条回答
  •  长情又很酷
    2020-12-04 11:40

    read n
    if ! ((n % 4)); then
        echo "$n divisible by 4."
    fi
    

    The (( )) operator evaluates expressions as C arithmetic, and has a boolean return.

    Hence, (( 0 )) is false, and (( 1 )) is true. [1]

    The $(( )) operator also expands C arithmetic expressions, but instead of returning true/false, it returns the value instead. Because of this you can test the output if $(( )) in this fashion: [2]

    [[ $(( n % 4 )) == 0 ]]
    

    But this is tantamount to: if (function() == false). Thus the simpler and more idiomatic test is:

    ! (( n % 4 ))
    

    [1]: Modern bash handles numbers up to your machine's intmax_t size.

    [2]: Note that you can drop $ inside of (( )), because it dereferences variables within.

提交回复
热议问题