web-dev-qa-db-ja.com

シェル-expr「乗算テーブル」を使用

私は九九を作成するためにシェルを学んでいます、私はそのようなコードを書きます:

#!/ 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
Lost Vanity

はい、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"
0

不要なテストを削除して、ソリューションを少し簡素化します。

#!/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
0
Kusalananda