我写了一个简短的Bash脚本:
for j in 0 1 2 3 4 5
do
for (( i=$j; i <= 5; i++ ));
do
if [ $(($(($i - $j)) > 1)) ]; then
echo "True"
else
echo "False"
fi
done
done
我希望这个剧本输出真实和法尔斯的混合物,但它只输出真实。我已检查并看到$(($(($ i - $ j))&gt; 1))正确生成0和1,因为它应该但显然if语句没有注册这些并且总是假设&#34 ;真&#34;
我的代码中遗漏了什么?
非常感谢
詹姆斯
答案 0 :(得分:2)
您的脚本正在检查if [ 0 ]
和if [ 1 ]
,这不是您的想法。它总是返回true,因为它检查字符串0
和1
的长度不为零。
将其更改为:
for j in {0..5}
do
for (( i=j; i<=5; i++ ))
do
if (( i - j > 1 ))
then
echo True
else
echo False
fi
done
done
请注意,$
中变量的((...))
前缀的使用是可选的。
答案 1 :(得分:0)
您错误地使用if
,在进行算术比较时,您需要测试字符串长度:
for j in {0..5}; do
for i in $(seq $j 5); do
if (( i - j > 1 )); then
echo "True"
else
echo "False"
fi
done
done