在C / C ++中(bash也是?)第一个命令行参数argv [0]是二进制文件名(以用户调用的绝对路径或相对路径为前缀)。
在Perl中,第一个命令行参数$ ARGV [0]是脚本的路径和名称之后的第一个命令行参数。
Perl脚本如何获取用于调用它的路径和名称?
谢谢!
答案 0 :(得分:7)
$0
包含包含正在执行的perl脚本的文件的名称。
答案 1 :(得分:6)
顺便说一句,“在C / C ++中(bash也是?)第一个命令行参数argv [0]是二进制文件名”
是完全错误的。 ISO标准不要求这样做。
来自C99:
如果argc的值大于零,则argv [0]指向的字符串表示程序名称;如果程序名不能从主机环境获得,则argv [0] [0]应为空字符。
请注意,它表示“代表程序名称”,而不是“是二进制可执行文件的位置”。那是因为有一个早期的片段说明:
...数组成员argv [0]到argv [argc-1]包含指向字符串的指针,在程序启动之前由主机环境给出实现定义的值。“
对于你的argv[0]
来说,命令“sleep 60”是“pax的梦幻睡眠效用”而不是“/ bin / sleep”是完全合法的。
简而言之,环境不必提供程序的表示,即使它确实如此,也不必是可用于查找二进制文件的任何内容。
但是,为了使我的dia骂感到无聊,Perl为此提供了$0
或$PROGRAM_NAME
(以那种可怕的“英语”模式)。有关详细信息,请参阅perlvar。