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単語に分割されます。#

IFS=\# arr=($var)

等しい

arr=(a b c)

したがって、配列は、arrおよび要素で構成されます。abc

同じ理由でdocCodeArr分割された値で構成される配列。それはすべてです。imgCodeStr#

値にimgCodeStrワイルドカード(間の文字\[?*)が含まれている場合、シェルはワイルドカードパターンを一致するファイル名に拡張します。これを防ぐには、set -fワイルドカード拡張を無効にする行の前に置きます。ワイルドカード拡張を再度有効にする必要がある場合set +f

おすすめ記事