为什么在bash中无法将函数结果读取为带有v =“ $()”的变量

帕特里克

我想打印读取的数字的阶乘,stdin但是我不能这样(打印空行):

#!/bin/bash

factorial()
{
  if [ $1 -le 1 ]
  then
    return 1
  else
    factorial $[$1-1]
    return $[$1*$?]
  fi
}

read num

ret="$(factorial $num)"
echo "${ret}"

这种方式有效,但是我觉得情况有些糟(因为我以后无法保存变量了):

factorial $num
echo $?

为什么第一种方法不起作用?链接至对此有很高评价的答案,以解释该问题

如果您echo将阶乘函数中的结果而不是尝试将其返回,则第一种方法有效

$(...)语法计算结果为运行该命令的输出。由于您的代码本身没有输出,因此ret将为空。

#!/bin/bash

factorial()
{
  if [ $1 -le 1 ]
  then
    echo 1
  else
    part=$(factorial $(($1-1)))
    echo $(($1*$part))
  fi
}

read num

ret="$(factorial $num)"
echo "${ret}"

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章