当前位置: 首页 > 后端技术 > PHP

在PHP中,GNUC风格的命令行选项是通过getopt解析的

时间:2023-03-29 18:05:09 PHP

在PHP中,我们在获取命令行参数时,可以通过遍历$argv来获取。其实是有规定可循的,就是命令行选项的GNUC风格解析器。例如,在使用命令wget下载文件时,可以使用以下方法指定选项wgethttp://mengkang.net/a.jpg-Ob.jpgwgethttp://mengkang.net/a。jpg-Ob.jpg--tries=3-bwgethttp://mengkang.net/a.jpg-Ob.jpg--tries=3-bvd我们来梳理一下命令行选项的规则。首先,参数分为短参数名和全参数名,有的还存在映射关系。比如我们使用wget时,-O对应的是--output-document。综上所述,选项使用标准的短参数名称,并且存在局限性。只能是char字符,只能1个字节,不能超过1个字节。比如上面第四条命令的最后一个参数,不知道是一个参数还是三个参数。短参数名称以单个连字符(-)开头,短参数可以是一个-后跟多个参数名称。长参数名是多字节的,两个连字符(--)开始一行参与实际参数。可以直接连接,也可以用空格隔开,也可以用等号连接。,array$longopts[,int&$optind]]):arrayhttps://www.php.net/manual/zh...$options短参数字符列表,后面跟着参数字符:表示一个值必须是通过;在参数字符后使用::标识传递可选值;只有参数字符表示该参数(或选项)不接受值传递。$longopts长参数必须是数组,因为是多字节的,否则无法分隔。长参数也遵循上面的::和:规则。PHP中缺少结构体支持,比c的长选项的配置更简洁,但也缺少长短选项的映射关系配置。$shortOpts="O:Vv::dh";$longOpts=["output-document:","version","verbose::","debug","help"];$options=getopt($shortOpts,$longOpts);var_export($options);phpgetopt.php-Oa.jpgarray('O'=>'a.jpg',)phpgetopt.php-O=a.jpgarray('O'=>'a.jpg',)phpgetopt.php-Oa.jpg数组('O'=>'a.jpg',)phpgetopt.php-O=a.jpg-dhVarray('O'=>'a.jpg','d'=>false,'h'=>false,'V'=>false,)phpgetopt.php-O=a.jpg-dhV-vvvarray('O'=>'a.jpg','d'=>false,'h'=>false,'V'=>false,'v'=>'vv',)在上面的例子中,我的短参数和长参数对应,但是没有数据结构来表示他们的对应关系(C中有一个option结构来管理这个对应关系),所以如果我们把他们都传过来,程序的两个值都会收到,然后我们可以判断短参数和长参数使用哪一个。phpgetopt.php-O=a.jpg-dhV-vvv--output-documentb.jpg--debugarray('O'=>'a.jpg','d'=>false,'h'=>false,'V'=>false,'v'=>'vv','output-document'=>'b.jpg','debug'=>false,)这个不规范,尽量避免这样写。phpgetopt.php-O=a.jpg-dhVvvvarray('O'=>'a.jpg','d'=>false,'h'=>false,'V'=>false,'v'=>'vv',)phpgetopt.php-O=a.jpg-dhvvvVarray('O'=>'a.jpg','d'=>false,'h'=>false,'v'=>'vvV',)总结了这个GNUC命令行选项使用的套路,命令用起来比较溜,你不会困惑为什么Linux下各种工具使用的case写法“千奇百怪”。C不支持用等号连接的短选项和值,但是在PHP中是可以的,需要注意。