有沒有辦法從命令行傳遞一個proc參數?我的腳本中有我的過程。我想從命令行給出它的參數。在shell腳本中是否有像「$ @」這樣的等價命令?TCL中的proc參數
1
A
回答
4
您可以使用這些預定義的變量獲取命令行參數。
$argc - number items of arguments passed to a script.
$argv - list of the arguments.
$argv0 - name of the script.
0
也有args
可變數量的參數。
proc foo args {
foreach arg $args {
puts "arg=$arg"
}
}
所以調用foo將打印:
% foo 1
arg=1
% foo 1 2 3
arg=1
arg=2
arg=3
%
請注意,調用該進程內以$ ARGV會治療的$ ARGV在$ ARGC列表中的單個元素全部內容:
$ cat ar.tcl
#!/usr/bin/tclsh
proc foo args {
foreach arg $args {
puts "arg=$arg"
}
}
foo $argv
$
$ ./ar.tcl 1 2 3
arg=1 2 3
您將需要使用[lindex $args 0]
才能得到真實的
4
命令行參數有很多部分:
- - Tcl「有用」參數詞列表。排除腳本的名稱。
$argc
- 「有用」參數詞的數量(即,長度爲);因爲[llength $argv]
的作用也很好,所以很少使用。$argv0
- 正在執行的主腳本的名稱。[info nameofexecutable]
- 執行腳本的程序。通常稱爲tclsh
或wish
(或與版本號和擴展名有所不同),但絕對不一定如此。
通過了所有「有用」的說法的話,最簡單的方式 - 所有你通常所認爲的是參數的話 - 的過程是這樣做(假設Tcl的8.5或更高版本):
theProc {*}$argv
請注意,這個必須在之後所有調用proc
完成; proc
是定義過程的命令,而不是過程的聲明。 (這個區別?聲明可以被看作是文件的更深層次,但Tcl並不是這樣工作的。)
我經常喜歡在生產代碼中包裝一些異常處理,以便任何錯誤都可以很好地報道,而不是傾銷堆棧跟蹤:
if {[catch {theProc {*}$argv} msg]} {
handleError $msg
}
此前8.5,你需要一個更醜陋的方式:
eval theProc $argv
這仍然是安全的(正式意義上的),因爲Tcl如何保證構造列表值,以及我們知道是一個適當的列表。
相關問題
- 1. 使用proc在Tcl中複製參數
- 2. 如何設置默認值的參數proc是Tcl的
- 3. Tcl的數組GET不PROC與::工作
- 4. Eggdrop - TCL錯誤[錯誤#參數:應該是「proc name args body」]
- 5. proc聲明中的Tcl全局變量
- 6. 如何用verilog運行tcl proc函數?
- 7. 如何將帶有更多參數的字典傳遞給tcl中的proc?
- 8. 在tcl線程中調用proc
- 9. 在tcl腳本中編寫proc avg ns2_new
- 10. 如何從TCL中的proc傳遞數據集
- 11. TCL proc返回值的約定
- 12. 引用Tcl參數
- 13. 帶參數的方法proc
- 14. 的Tcl參數表澄清
- 15. 使用TCL中proc中的腳本中指定的變量
- 16. 如何打印出一個tcl proc?
- 17. tcl proc使用upvar導致歷史(nextid)
- 18. TCL:運行PROC從同一個文件
- 19. 使用tcl proc登錄到設備
- 20. Python將超過一個參數傳遞給tcl proc使用Tkinter tcl.eval
- 21. 在NS2中的tcl腳本中寫入proc avg
- 22. 參數在proc功能TYPO3
- 23. 問題從C#PROC參數
- 24. ROL in x86 ASM PROC參數
- 25. 在簡單的tcl proc中使用catch的問題
- 26. Tcl upvar在另一個proc中的變量
- 27. 有沒有辦法處理Tcl中不存在的proc?
- 28. 將一個proc複製到TCL中的命名空間
- 29. 無法在TCL中調用proc無效的命令名稱
- 30. 如何將列表傳遞給TCL中的proc?