在C/C++(也是bash)中,第一個命令行參數argv [0]是二進制文件名(前綴爲由用戶調用的絕對路徑或相對路徑)。如何獲得正在運行的Perl腳本的路徑和名稱(C語言中的argv [0])
在Perl中,第一個命令行參數$ ARGV [0]是腳本路徑和名稱後的第一個命令行參數。
Perl腳本如何獲取用於調用它的路徑和名稱?
謝謝!
在C/C++(也是bash)中,第一個命令行參數argv [0]是二進制文件名(前綴爲由用戶調用的絕對路徑或相對路徑)。如何獲得正在運行的Perl腳本的路徑和名稱(C語言中的argv [0])
在Perl中,第一個命令行參數$ ARGV [0]是腳本路徑和名稱後的第一個命令行參數。
Perl腳本如何獲取用於調用它的路徑和名稱?
謝謝!
「以C/C++(bash中,太?)的第一個命令行參數,argv的[0],是二進制文件名」
是完全錯誤的,順便。 ISO標準沒有規定這樣的事情。
來自C99:
如果的argc的值是大於零,則該字符串通過的argv指向[0]表示程序名;如果程序名稱在主機環境中不可用,則argv [0] [0]應爲空字符。
,請注意,聲明「表示程序名」,而不是「是二進制可執行文件的位置」。這是因爲有一個較早的片斷其中規定:
...陣列成員的argv [0]通過的argv [ARGC-1]包括應包含指向字符串的指針,由主機環境定實現定義的值編程啓動之前。」
這是您的argv[0]
的命令完全合法的‘睡眠60’是‘PAX夢幻般的睡眠工具’,而不是‘/ bin中/休眠’。
總之,環境不需要提供程序的表示,即使它有,它也沒有o是可用於查找二進制文件的任何東西。
但是,已經厭倦你用我的謾罵,Perl提供$0
或$PROGRAM_NAME
(在那個可惡的「英語」模式),用於這一目的。詳情請參閱perlvar。
$0
包含包含正在執行的perl腳本的文件的名稱。
好的,很好。我想我不是在尋找完美的可移植性。順便說一句,POSIX是否會說argv [0]包含的內容? – 2010-07-06 23:29:21
我不應該將這種argv行爲與C或任何高級語言聯繫起來。以下是POSIX.1所說的: http://www.opengroup.org/onlinepubs/009695399/functions/exec.html 參數argv是一個由空字符結尾的字符串指針組成的數組。應用程序應確保該數組的最後一個成員是空指針。這些字符串應構成新過程映像可用的參數列表。 argv [0]中的值應該指向與其中一個exec函數啓動的進程關聯的文件名。 – 2010-07-06 23:39:11