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.

관련 정보