Bash
bash 變數的拆分
我們有用 bash 腳本編寫的 cgi 應用程序。我試圖了解下面的程式碼片段是如何工作的。基本上它是一個下拉菜單,選擇由 _getDocType 邏輯控制。該函式如何獲取“imgCodeStr”的值?所有這些程式碼都在一個用 bash 編寫的 cgi 文件下。
HTML 生成函式
<select id="docType" name="doctype" style="width:100%"> $(_getDocType) </select>
_getDocType 函式定義在哪裡
_getDocType() { tmpIfs=IFS IFS="#" docCodeArr=($imgCodeStr) <-- Please explain this specifically IFS=tmpIfs for (( i=0; i<${#docCodeArr[*]}; i++ )) do echo "<option value=\"${docCodeArr[$i]}\">${docCodeArr[$i]}" echo "</option>" done }
這是一個更簡單的例子:
var='a#b#c' IFS=\# arr=($var) echo "${arr[@]}"
該構造
arr=(...)
建構一個數組。由於IFS
設置為#
, 的值var
被拆分為單詞 at#
而不是空格,所以IFS=\# arr=($var)
相當於
arr=(a b c)
因此,數組
arr
由元素a
、b
和組成c
。出於同樣的原因,
docCodeArr
是一個數組,由imgCodeStr
split at的值組成#
。這就是它的全部內容。請注意,如果 的值
imgCodeStr
包含萬用字元(之間的字元\[?*
),shell 會將萬用字元模式擴展為匹配的文件名。為避免這種情況,set -f
請在該行之前放置以禁用萬用字元擴展。如果您需要重新啟用萬用字元擴展,請使用set +f
.