Bash

bash 變數的拆分

  • March 27, 2017

我們有用 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由元素ab和組成c

出於同樣的原因,docCodeArr是一個數組,由imgCodeStrsplit at的值組成#。這就是它的全部內容。

請注意,如果 的值imgCodeStr包含萬用字元(之間的字元\[?*),shell 會將萬用字元模式擴展為匹配的文件名。為避免這種情況,set -f請在該行之前放置以禁用萬用字元擴展。如果您需要重新啟用萬用字元擴展,請使用set +f.

引用自:https://unix.stackexchange.com/questions/354115