shell - 使用 expr“乘法表”

shell - 使用 expr“乘法表”

我正在学习 shell 来创建乘法表,我编写这样的代码:

#!/ in/bash

for i in 1 2 3 4 5 6 7 8 9

do

    for j in 1 2 3 4 5 6 7 8 9
    do
            if [ $j -le $i ]
            then
                    echo -ne "$i"X"$j"=`expr "$i"*"$j"` "\t"
            else
                    echo
                            break
            fi
            done
    done
echo -ne "\n"

但是我在控制台中得到这样的响应:

1X1=1*1
2X1=2*1         2X2=2*2
3X1=3*1         3X2=3*2         3X3=3*3
4X1=4*1         4X2=4*2         4X3=4*3         4X4=4*4
...

我希望答案是“1x1=1, 2x1=2 ...”。谁能告诉我如何修改这段代码?

答案1

是的,你可以使用 bash内置算术扩展 $(( ))做一些简单的数学运算。

对于乘法:

echo $(( 6 * 7 ))

结果

42

你的脚本将如下所示:

#!/ in/bash

for i in 1 2 3 4 5 6 7 8 9

do

    for j in 1 2 3 4 5 6 7 8 9
    do
            if [ $j -le $i ]
            then
                    echo -ne "$i"X"$j"=$(($i * $j)) "\t"
            else
                    echo
                            break
            fi
            done
    done
echo -ne "\n"

答案2

通过删除不必要的测试来稍微简化解决方案:

#!/bin/bash

for (( i = 1; i < 10; ++i )); do
  for (( j = 1; j <= i; ++j )); do
    printf '%dx%d=%-2d  ' "$i" "$j" "$(( i * j ))"
  done
  printf '\n'
done

相关内容