如果在bash中使用语句算术,我该怎么办?
我想要做这样的事情:
if [ $1 % 4 == 0 ]; then ...
但是这不起作用。 我需要做些什么呢?
谢谢
read n if ! ((n % 4)); then echo "$n divisible by 4." fi
(( ))
运算符将expression式评估为C运算,并且具有布尔返回值。
因此, (( 0 ))
是假的, (( 1 ))
是真的。 [1]
$(( ))
运算符也扩展了C运算expression式,但不是返回true / false,而是返回值。 正因为如此,你可以用这种方式testing输出$(( ))
:[2]
[[ $(( n % 4 )) == 0 ]]
但是这等于: if (function() == false)
。 因此,更简单和更习惯的testing是:
! (( n % 4 ))
[1]:现代bash处理数字,直到你的机器的intmax_t
大小。
[2]:请注意,您可以在(( ))
内放置$
,因为它将取消引用内部的variables。
单个括号( [..]
)对于某些testing不起作用,请尝试使用双括号( [[...]]
),并将mod放在((..))
以正确评估%
运算符:
if [[ $(( $1 % 4 )) == 0 ]]; then
更多细节在这里:
http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_02.html
a=4 if [ $(( $a % 4 )) -eq 0 ]; then echo "I'm here" fi
这可能适合你:
((a%4==0)) && echo "$a is divisible by 4" || echo "$a is not divisible by 4"
或者更简洁:
((a%4)) && echo "$a is not divisible by 4" || echo "$a is divisible by 4"