如何获取正在运行的Perl脚本';s路径和名称(C中的argv[0] < C/C++(BASH,也?)第一个命令行参数,ARVV(0),是二进制文件名(由用户调用的绝对路径或相对路径前缀)。
在Perl中,第一个命令行参数$ARGV[0]是脚本路径和名称之后的第一个命令行参数 Perl脚本如何获取用于调用它的路径和名称如何获取正在运行的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]应为空字符 请注意,它表示“代表程序名”
谢谢
$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如下所示: