Как передать аргументы в сценарии tcl при использовании tclsh

У меня есть два сценария tcl, которым я хочу передать аргументы. Первый получает число и дает свой факториал, второй получает два числа и выполняет некоторые условия и выводит соответственно. Я использую tclsh на Cygwin. Я не могу передать аргументы скрипту, поскольку я запускаю скрипт следующим образом:
$ tclsh fact.tcl
который дает ошибку, что я не предоставил надлежащее количество аргументов для сценария.
Чтобы передать аргумент, я попробовал следующее, но в итоге получил ошибку "дополнительные символы после закрывающей скобки":
tclsh fact.tcl 5
Код tcl для факториала:

if {$argc !=1} {
    puts stderr "Error! ns called with wrong number of arguments! ($argc)"
    exit 1
} else {
    set f [lindex $argv 0]
}


proc Factorial {x} {
for {set result 1} {$x>1}{set x [expr $x - 1]}{
    set result [expr $result * $x]
}
return $result
}
set res [Factorial $f]
puts "Factorial of $f is $res"

Код tcl для условных выражений (второй скрипт) выглядит следующим образом:

if {$argc!=2} {
    puts "Error! incorrect parameter count ($argc)"
    exit 1
}
set a [lindex $argv 0]
set b [lindex $argv 1]


if {fmod($a, 2) ==0} {
    if {fmod($b,2) ==0} {
        if {$a<$b}
        puts "a and b even; pow=[expr pow($a,$b)]"
        else 
        puts "a and b even. pow=[expr pow($b,$a)]"
    }
    else {
        if{$a>=$b}
            puts [expr $a-$b]
        else 
            puts [expr $b-$a]

    }
}
else if {fmod($a,2)==1} {
    if {fmod($b,2)==1} {
        if {$a<$b}
        puts "a and b even; pow=[expr pow($a,$b)]"
        else 
        puts "a and b even. pow=[expr pow($b,$a)]"
    }
    else {
        if{$a>=$b}
            puts [expr $a-$b]
        else 
            puts [expr $b-$a]

    }
}

0 ответов

Другие вопросы по тегам