gcc 4.3 configure指令碼學習(2):Be Bourne compatible

來源:互聯網
上載者:User

 

  在configure的第一段就是:if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"'elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then set -o posixfiDUALCASE=1; export DUALCASE # for MKS sh學習吧! 1             ifif語句測試條件,測試條件返回真( 0)或假(1)後,可相應執行一系列語句。i f語句結構對錯誤檢查非常有用。其格式為:if 條件1then 命令1elif 條件2then 命令2else 命令3fi很簡單,呵呵。使用i f語句時,必須將t h e n部分放在新行,否則會產生錯誤。如果要不分行,必須使用命令分隔字元。 2             test寫指令碼時,有時要判斷字串是否相等,可能還要檢查檔案狀態或是數字測試。基於這些測試才能做進一步動作。Te s t命令用於測試字串,檔案狀態和數字。t e s t一般有兩種格式,即:test condition或[ c o n d i t i o n ]使用方括弧時,要注意在條件兩邊加上空格。字串測試是錯誤捕獲很重要的一部分,特別在測試使用者輸入或比較變數時尤為重要。字串測試有5種格式。l         test “string”l         test string_op “string”l         test “string” string_op “string”l         [string_op string]l         [“string” string_op “string”]這裡,s t r i n g _ o p可為:= 兩個字串相等。!= 兩個字串不等。-z 空串。-n 非空串。 3             變數賦值上述語句中:${ZSH_VERSION+set}就是對變數的賦值操作,ZSH_VERSION和BASH_VERSION都是不同的shell定義的值,且是唯讀。對於cygwin來講,BASH_VERSION的值為3.2.33(18)-release。而其中的加號表示如果設定了v a r i a b l e - n a m e,則重設其值。返回的結果為這個變數最終的值。其它相關的幾個賦值符號為:Va r i a b l e - n a m e = v a l u e 設定實際值到v a r i a b l e - n a m eVa r i a b l e - n a m e + v a l u e 如果設定了v a r i a b l e - n a m e,則重設其值Va r i a b l e - n a m e : ? v a l u e 如果未設定v a r i a b l e - n a m e,顯示未定義使用者錯誤資訊Va r i a b l e - n a m e ? v a l u e 如果未設定v a r i a b l e - n a m e,顯示系統錯誤資訊Va r i a b l e - n a m e : = v a l u e 如果未設定v a r i a b l e - n a m e,設定其值Va r i a b l e - n a m e : - v a l u e 同上,但是取值並不設定到v a r i a b l e - n a m e,可以被替換因此對於本段代碼,if語句的第一個條件將為假,後面的emulate sh當然也就不會執行。而elif的第一個條件則為真。 4             setset是bash的一個內建命令,man page中對set –o posix的解釋是:change the behavior of bash where the default operation differs from the POSIX standard to match the mode standard(posix mode).如果命令成功其傳回值為0。 5             重新導向linux下常用的重新導向命令command > filename 把把標準輸出重新導向到一個新檔案中command >> filename 把把標準輸出重新導向到一個檔案中(追加)command 1 > fielname 把把標準輸出重新導向到一個檔案中command > filename 2>&1 把把標準輸出和標準錯誤一起重新導向到一個檔案中command 2 > filename 把把標準錯誤重新導向到一個檔案中command 2 >> filename 把把標準輸出重新導向到一個檔案中(追加)command >> filename 2>&1 把把標準輸出和標準錯誤一起重新導向到一個檔案中(追加)command < filename >filename2 把c o m m a n d命令以f i l e n a m e檔案作為標準輸入,以f i l e n a m e 2檔案作為標準輸出command < filename 把c o m m a n d命令以f i l e n a m e檔案作為標準輸入command << delimiter 把從標準輸入中讀入,直至遇到d e l i m i t e r分界符command <&m 把檔案描述符m作為標準輸入command >&m 把標準輸出重新導向到檔案描述符m中command <&- 關閉標準輸入因此>/dev/null 2>&1也就很容易理解了,就是不顯示錯誤訊息和命令的輸出。 6             export環境變數用於所有使用者進程(經常稱為子進程)。登入進程稱為父進程。s h e l l中執行的使用者進程均稱為子進程。不像本地變數(只用於現在的s h e l l)環境變數可用於所有子進程,這包括編輯器、指令碼和應用。傳統上,所有環境變數均為大寫。環境變數應用於使用者進程前,必須用e x p o r t命令匯出。環境變數與本地變數設定方式相同。DUALCASE=1; export DUALCASE # for MKS sh就是匯出了一個稱為DUALCASE的環境變數。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.