#!bin/bash
d1=-7
d2=-2
if (( $(awk 'BEGIN {print ("'$d1'" >= "'$d2'")}') )); then
echo "yes"
echo "$d1 >= $d2"
else
echo "no"
fi
为什么我得到了?
yes
-7 >= -2
感谢
答案 0 :(得分:1)
您不能在$variable_name
中使用awk
来简单地使用shell变量。您应初始化awk
变量,例如 - > -v var="$shell_variable"
然后您可以在awk
代码中使用shell变量的值。请尝试关注awk
:
awk -v d1="$d1" -v d2="$d2" 'BEGIN{if(d1>=d2){print "yes";} else {print "no"}}'
答案 1 :(得分:1)
这是一个使用bc -l
来比较浮点数的较短命令:
[[ $(bc -l <<< "$d1 >= $d2") -eq 1 ]] && echo "yes" || echo "no"
答案 2 :(得分:1)
双引号导致awk
执行字符串比较,而-7
词典编纂大于-2
,因为7
位于2
之后1}}。
您只需要反转单引号和双引号,以便在扩展变量时shell使用双引号。也就是说,而不是
if (( $(awk 'BEGIN {print ("'$d1'" >= "'$d2'")}') )); then
使用
if (( $(awk 'BEGIN {print ('"$d1"' >= '"$d2"')}') )); then
但是,使用awk
选项将值传递到正确的-v
变量仍然是一个更好的主意。
答案 3 :(得分:1)
不需要在shell中进行任何额外的数值计算,只需让awk设置适当的退出状态并使用简单的shell if
进行测试:
$ cat tst.sh
d1=$1
d2=$2
if $( awk -v d1="$d1" -v d2="$d2" 'BEGIN{exit (d1 >= d2 ? 0 : 1)}' ); then
echo "yes"
echo "$d1 >= $d2"
else
echo "no"
fi
$ ./tst.sh -0.5 -0.409
no
$ ./tst.sh -0.5 -0.500
yes
-0.5 >= -0.500
$ ./tst.sh -0.5 -0.501
yes
-0.5 >= -0.501
答案 4 :(得分:0)
使用 bash
:
#!/usr/bin/bash
d1=-7
d2=-2
if (( d1 >= d2 )); then
echo "yes"
else
echo "no"
fi
对于花车:
#!/usr/bin/bash
d1=-7.6
d2=-2.3
if [ "$(echo ${d1}'>='${d2} | bc -l)" = "1" ]; then
echo "yes"
else
echo "no"
fi