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
}

答案1

这是一个更简单的例子:

var='a#b#c'
IFS=\# arr=($var)
echo "${arr[@]}"

该构造arr=(...)构建一个数组。由于IFS设置为#, 的值var被分割成单词 at#而不是空格,所以

IFS=\# arr=($var)

相当于

arr=(a b c)

因此,该数组由元素、和arr组成。abc

出于同样的原因,是一个数组,由split atdocCodeArr的值组成。这就是全部内容了。imgCodeStr#

请注意,如果 的值imgCodeStr包含通配符( 之间的字符\[?*),shell 会将通配符模式扩展为匹配的文件名。为了避免这种情况,请放在set -f该行之前以禁用通配符扩展。如果需要重新启用通配符扩展,请使用set +f.

相关内容