濮阳杆衣贸易有限公司

主頁 > 知識庫 > PHP中通過getopt解析GNU C風(fēng)格命令行選項

PHP中通過getopt解析GNU C風(fēng)格命令行選項

熱門標(biāo)簽:杭州語音電銷機(jī)器人 欣思維地圖標(biāo)注 天潤融通外呼系統(tǒng)好嗎 高德地圖標(biāo)注店鋪收費(fèi)嗎 江西電銷機(jī)器人收費(fèi) 高德地圖標(biāo)注位置怎么標(biāo)注 電銷機(jī)器人沒有效果怎么樣 泊頭在哪里辦理400電話 江門回?fù)芡夂粝到y(tǒng)

在 PHP 中,當(dāng)我們在獲取命令行參數(shù)時,可以通過遍歷$argv來獲取,其實呢是有規(guī)范可循的,也就是 GNU C-style parser for command line options 。

比如使用命令wget下載文件時,使用下面的一些方式來指定option都可以

wget http://mengkang.net/a.jpg -O b.jpg
wget http://mengkang.net/a.jpg -O=b.jpg
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -b
wget http://mengkang.net/a.jpg -Ob.jpg --tries=3 -bvd

我們整理下command line options的規(guī)則,首先參數(shù)分為短參數(shù)名和完整參數(shù)名,而且一些還有映射關(guān)系。比如我們使用wget時,-O對應(yīng)--output-document。

總結(jié) options 使用規(guī)范

  • 短參數(shù)名,有一個限制,只能是一個char字符,只能1字節(jié),不能超過1字節(jié),比如上面的第四個命令的最后一個參數(shù)就不知道是一個參數(shù)還是三個參數(shù)了。
  • 短參數(shù)名用單個連字符(-)開始
  • 短參數(shù)可以一個-后面跟多個參數(shù)名
  • 長參數(shù)名,則是多字節(jié)的的,兩個連字符(--)開始
  • 行參與實參之間,可以直接連接,也可以用空格隔開,還可以用等號連接
  • 參數(shù)分為沒有值,必須傳值,可選傳值(也就是可傳可不傳)

在 PHP 中的使用

getopt ( string $options [, array $longopts [, int $optind ]] ) : array

https://www.php.net/manual/zh/function.getopt.php

$options 短參數(shù)字符列表,參數(shù)字符后面用:標(biāo)識必須傳值;參數(shù)字符后面用::標(biāo)識可選傳值;只有參數(shù)字符表示該參數(shù)(或者說選項)不接受傳值

$longopts 長參數(shù)由于是多字節(jié),所以必須是數(shù)組,否則沒法分隔。長參數(shù)同樣遵循上面::、:規(guī)則

php里面缺少結(jié)構(gòu)體的支撐,相比c的長選項的配置更加簡潔,但也缺少了長短選項的映射關(guān)系配置。

$shortOpts = "O:Vv::dh";
$longOpts = ["output-document:","version","verbose::", "debug", "help"]; 
$options = getopt($shortOpts, $longOpts);

var_export($options);
php getopt.php -Oa.jpg 
array (
 'O' => 'a.jpg',
)
php getopt.php -O=a.jpg
array (
 'O' => 'a.jpg',
)
php getopt.php -O a.jpg                 
array (
 'O' => 'a.jpg',
)
php getopt.php -O=a.jpg -dhV
array (
 'O' => 'a.jpg',
 'd' => false,
 'h' => false,
 'V' => false,
)
php getopt.php -O=a.jpg -dhV -vvv
array (
 'O' => 'a.jpg',
 'd' => false,
 'h' => false,
 'V' => false,
 'v' => 'vv',
)

上面例子中我的短參數(shù)和長參數(shù)是對應(yīng)的,但是沒有數(shù)據(jù)結(jié)構(gòu)來表示他們的對應(yīng)關(guān)系(在C里面有option結(jié)構(gòu)體來做這個對應(yīng)關(guān)系的管理),所以我們兩個都傳的話,程序兩個值會收到,然后我們自己判斷短參數(shù)和長參數(shù)使用哪個。

php getopt.php -O=a.jpg -dhV -vvv --output-document b.jpg --debug
array (
 'O' => 'a.jpg',
 'd' => false,
 'h' => false,
 'V' => false,
 'v' => 'vv',
 'output-document' => 'b.jpg',
 'debug' => false,
)

這樣寫是不規(guī)范的,盡量避免這樣的寫法。

php getopt.php -O=a.jpg -dhVvvv 
array (
 'O' => 'a.jpg',
 'd' => false,
 'h' => false,
 'V' => false,
 'v' => 'vv',
)
php getopt.php -O=a.jpg -dhvvvV
array (
 'O' => 'a.jpg',
 'd' => false,
 'h' => false,
 'v' => 'vvV',
)

總結(jié)了這個GNU C command line options 使用的套路,命令使用起來就更溜了,不會懵逼為什么linux下各種工具使用的案例寫法“千奇百怪”了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • ThinkPHP3.1.2 使用cli命令行模式運(yùn)行的方法
  • php web環(huán)境和命令行環(huán)境下查找php.ini的位置
  • php根據(jù)命令行參數(shù)生成配置文件詳解
  • php命令行寫shell實例詳解
  • php命令行模式代碼實例詳解

標(biāo)簽:大同 駐馬店 石嘴山 雙鴨山 內(nèi)江 深圳 江門

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP中通過getopt解析GNU C風(fēng)格命令行選項》,本文關(guān)鍵詞  PHP,中,通過,getopt,解析,GNU,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP中通過getopt解析GNU C風(fēng)格命令行選項》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP中通過getopt解析GNU C風(fēng)格命令行選項的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    闸北区| 景德镇市| 朝阳县| 靖西县| 桑植县| 东至县| 射阳县| 黑龙江省| 长白| 巨野县| 福海县| 眉山市| 江源县| 台湾省| 衡水市| 长武县| 墨脱县| 海原县| 崇文区| 安西县| 山丹县| 安多县| 湄潭县| 水富县| 衡山县| 南丰县| 繁峙县| 滨州市| 育儿| 广南县| 龙川县| 景德镇市| 大连市| 丘北县| 涞水县| 织金县| 汽车| 花莲县| 宣威市| 张家口市| 蒙山县|