有沒有辦法從命令行傳遞一個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. Eggdrop - TCL錯誤[錯誤#參數:應該是「proc name args body」]
- 4. proc聲明中的Tcl全局變量
- 5. 如何用verilog運行tcl proc函數?
- 6. 如何將帶有更多參數的字典傳遞給tcl中的proc?
- 7. 如何從TCL中的proc傳遞數據集
- 8. 引用Tcl參數
- 9. 帶參數的方法proc
- 10. 的Tcl參數表澄清
- 11. TCL:運行PROC從同一個文件
- 12. tcl proc使用upvar導致歷史(nextid)
- 13. 使用tcl proc登錄到設備
- 14. 如何打印出一個tcl proc?
- 15. 在NS2中的tcl腳本中寫入proc avg
- 16. 問題從C#PROC參數
- 17. 參數在proc功能TYPO3
- 18. 在簡單的tcl proc中使用catch的問題
- 19. 需要從C++中的另一個文件調用tcl proc
- 20. tcl中proc語法的幾種風格有什麼區別?
- 21. Tcl upvar在另一個proc中的變量
- 22. 如何將列表傳遞給TCL中的proc?
- 23. 將一個proc複製到TCL中的命名空間
- 24. 有沒有辦法處理Tcl中不存在的proc?
- 25. 分裂的/ proc/CMDLINE參數用空格
- 26. 用參數調用帶有instance_eval的proc?
- 27. 插入WHERE子句的SQL Proc參數?
- 28. 獲取未評估的tcl參數
- 29. TCL Tcllib DES錯誤的參數?
- 30. 的Tcl:遞歸PROC賦予「的堆棧空間」