Linux 函数生成0到50之间的随机数

Linux 函数生成0到50之间的随机数,linux,bash,function,Linux,Bash,Function,下面是我认为会创建一个0到50之间的随机数的代码(都包括在内) 第一个回波函数工作正常,它每次都显示一个随机数,但另一个回波函数的输出总是为零 函数生成0到50之间的随机数 职能: rand() { echo $((RANDOM % 50)); } 您的代码: bash使用字符串 rand“var”“var1”将字符串var和字符串var1传递给函数 然后localvar1=$1将变量var1设置为局部变量,var1变量的值为var字符串(!) 然后localvar2=$2等于localva

下面是我认为会创建一个0到50之间的随机数的代码(都包括在内)

第一个回波函数工作正常,它每次都显示一个随机数,但另一个回波函数的输出总是为零

函数生成0到50之间的随机数

职能:

rand() { echo $((RANDOM % 50)); }
您的代码:

  • bash使用字符串
  • rand“var”“var1”
    将字符串
    var
    和字符串
    var1
    传递给函数
  • 然后
    localvar1=$1
    将变量
    var1
    设置为局部变量,
    var1
    变量的值为
    var
    字符串(!)
  • 然后
    localvar2=$2
    等于
    localvar2=“var1”
    ,它将
    var2
    变量值设置为字符串“var1”
  • local result=$((var1%var2))
    无效。这等于
    localresult=$((“var”%“var1”)
    。你不能在“字符串”上做微积分,它毫无意义
  • 只需将变量
    rand“$var”“$var1”
    的值传递给函数即可

我们可以将整数传递给bash中的函数吗本质上没有整数。这里有线。“整数”是一个字符串(即以10为基数表示)
var1=1
将变量1设置为字符串1。当您进行算术展开时,
$(…)
然后shell将字符串转换为数字,进行算术运算,然后将数字转换回字符串,以10为基数表示。您可以使用
$
来“展开”变量,即获取它的值,即
rand“$var”“$var1”
。请阅读关于该主题的在线资源,例如。我承认我没有深入研究bash源代码来了解如何实现它,但您可以给变量一个整数“属性”:
declare-ivar
。然后,如果您尝试为它分配一个非整数值,它只会被分配为零。请参阅和。另请参见,特别是
rand
函数的实现。
rand() { echo $((RANDOM % 50)); }