我有两个要向其传递参数的 tcl 脚本。第一个得到一个数字并给出它的阶乘,第二个得到两个数字并相应地执行一些条件和输出。我在 Cygwin 上使用 tclsh。当我以这种方式运行脚本时,我无法将参数传递给脚本:
$ 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]
}
}