Как передать аргументы в сценарии 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]
}
}