I'm trying to write recursive functions in my shell scripts.Consider the following code:function printA {    if [[ $1 = 0 ]]; then        return    else        echo a$(printA $(($1 - 1)))    fi}printA 10function factorial {    if [[ $1 = 0 ]]; then        return 1    else        return $(( $1 * $(factorial $(( $1 - 1 )) ) ))    fi}echo $(factorial 5) The code fails on:bash (3.0)recur.sh: line 5: 10 - 1: syntax error: operand expected (error token is 10 - 1)arecur.sh: line 16: 1 *  : syntax error: operand expected (error token is 1 *  )recur.sh: line 16: 2 *  : syntax error: operand expected (error token is 2 *  )recur.sh: line 16: 3 *  : syntax error: operand expected (error token is 3 *  )recur.sh: line 16: 4 *  : syntax error: operand expected (error token is 4 *  )recur.sh: line 16: 5 *  : syntax error: operand expected (error token is 5 *  )zsh (4.2.1)printA:1: bad math expression: illegal character: afactorial:5: bad math expression: illegal character: However it partly succeds using ksh88. Only the second function fails:aaaaaaaaarecur.sh[5]:  1 *  : more tokens expectedrecur.sh[5]:  2 *  : more tokens expectedrecur.sh[5]:  3 *  : more tokens expectedrecur.sh[5]:  4 *  : more tokens expectedrecur.sh[5]:  5 *  : more tokens expectedAm I doing anything wrong?Is there another recursive syntax supported by bash and zsh?Why does the second function (factorial) fail in ksh?PS: I know, recursion is Evil, performs badly, I should use a regular loop instead, bla bla bla. I am not discussing whether recursion is good or bad, but whether common shells support it. I am not foolish enough to send recursive functions in production when simple iterative loops would do the trick :)
Do shells support recursion?
bash;shell;shell script;zsh;ksh
Syntax error: use no quotes inside arithmetic evaluation.Logic error: you are mixing STDOUT and return values.Either pass values as STDOUT:function factorial {    (( $1 )) &&    echo $(( $1 * $( factorial $(( $1 - 1 )) ) )) ||    echo 1}factorial 5Or return them:function factorial {    (( $1 )) || return 1    factorial $(( $1 - 1 ))    return $(( $1 * $? ))}factorial 5echo $?Both codes work in bash, ksh (93 sure, no idea about 88) and zsh, so I guess yes, shells do support recursion.