for循环中bash中的简单数学语句

phy*_*ael 6 math syntax bash for-loop

我是新手来编写脚本并且通常可以避免所有成本但是我需要编写一个bash脚本来执行远程集群上的一些简单的事情.我遇到了一个执行以下操作的for循环问题:

for i in {1..20}
do
    for j in {1..20}
    do
        echo (i*i + j*j ) **.5  <--- Pseudo code!
    done
done
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个简单的数学问题吗?我$到处都扔了,不能写得好.如果你能帮助我理解变量在bash for循环中的命名/赋值方式以及bash数学解释的局限性(你如何做平方根?)我将非常感激.谢谢!

CB *_*ley 11

算术扩展需要$((...))表示法,例如:

echo $((i*i + j*j))
Run Code Online (Sandbox Code Playgroud)

但是,bash只使用整数,因此您可能需要使用外部工具,如dc.

例如

dc -e "18k $i $i * $j $j * + v p"
Run Code Online (Sandbox Code Playgroud)


dus*_*ine 8

这是一个不错的解决方案:

for i in {1..20}
do
   for j in {1..20}
   do
       echo "scale = 3; sqrt($i*$i + $j*$j)" | bc
   done
done
Run Code Online (Sandbox Code Playgroud)

输出将是:

1.414
2.236
3.162
2.236
[...etc...]
Run Code Online (Sandbox Code Playgroud)