如何获取正在运行的Perl脚本';s路径和名称(C中的argv[0] < C/C++(BASH,也?)第一个命令行参数,ARVV(0),是二进制文件名(由用户调用的绝对路径或相对路径前缀)。

如何获取正在运行的Perl脚本';s路径和名称(C中的argv[0] < C/C++(BASH,也?)第一个命令行参数,ARVV(0),是二进制文件名(由用户调用的绝对路径或相对路径前缀)。,perl,command-line-arguments,Perl,Command Line Arguments,在Perl中,第一个命令行参数$ARGV[0]是脚本路径和名称之后的第一个命令行参数 Perl脚本如何获取用于调用它的路径和名称 谢谢 $0包含包含正在执行的perl脚本的文件名 在C/C++(BASH,也是)?第一个命令行参数,ARVV(0),是二进制文件名“< /P>” 顺便说一句,这完全错了。ISO标准不要求这样的事情 从C99开始: 如果argc的值大于零,则argv[0]指向的字符串表示程序名;如果程序名在主机环境中不可用,则argv[0][0]应为空字符 请注意,它表示“代表程序名”

在Perl中,第一个命令行参数$ARGV[0]是脚本路径和名称之后的第一个命令行参数

Perl脚本如何获取用于调用它的路径和名称


谢谢

$0
包含包含正在执行的perl脚本的文件名

在C/C++(BASH,也是)?第一个命令行参数,ARVV(0),是二进制文件名“< /P>” 顺便说一句,这完全错了。ISO标准不要求这样的事情

从C99开始:

如果argc的值大于零,则argv[0]指向的字符串表示程序名;如果程序名在主机环境中不可用,则argv[0][0]应为空字符

请注意,它表示“代表程序名”,而不是“二进制可执行文件的位置”。这是因为前面有一段话说:

。。。数组成员argv[0]到argv[argc-1]应包含指向字符串的指针,这些字符串在程序启动前由主机环境给定实现定义的值。”

您的
argv[0]
命令“sleep 60”是“pax的奇妙睡眠实用程序”,而不是“/bin/sleep”,这是非常合法的

简而言之,环境不必提供程序的表示,即使它提供了,也不必为定位二进制文件提供任何可用的东西



但是,由于我的批评让您感到厌烦,Perl为此提供了
$0
$PROGRAM\u NAME
(以那种可怕的“英语”模式)。有关详细信息,请参见。

好的,我想我并不是在寻找完美的可移植性。顺便问一下,POSIX是否对argv[0]有任何说明包含?我不应该将此argv行为与C或任何高级语言相关联。POSIX.1是这样说的:参数argv是指向以null结尾的字符串的字符指针数组。应用程序应确保此数组的最后一个成员是null指针。这些字符串应构成可用于e新的进程映像。argv[0]中的值应该指向与某个exec函数启动的进程相关联的文件名。没问题,浦项制铁,我只是想把它提出来。当有人谈论C标准时,可以这么说,它总是意味着ISO-POSIX是下一个级别。在任何情况下,一旦你习惯了““语言律师”将标准文件(以及我们的要求文件)放在一起,您意识到“应”和“应”具有非常具体的含义。“应”表示情况确实如此,而“应”仅表示情况确实如此,但不一定如此。参见ISO/IEC指令的附录H,POSIX如下所示: