Divisão da variável bash

0

Temos uma aplicação cgi escrita em scripts bash. Estou tentando entender como o snippet de código abaixo funciona. Basicamente, é um menu suspenso e as opções são regidas pela lógica _getDocType. Como a função recebe o valor de "imgCodeStr"? Todo este código está sob um arquivo cgi escrito em bash.

Função de geração de HTML

<select id="docType" name="doctype" style="width:100%">
        $(_getDocType)
</select>

onde a definição da função _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
}
    
por dimas 27.03.2017 / 15:42

1 resposta

3

Aqui está um exemplo mais simples:

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

A construção arr=(...) cria uma matriz. Como IFS está definido como # , o valor de var é dividido em palavras em # em vez de espaços, então

IFS=\# arr=($var)

é equivalente a

arr=(a b c)

Assim, a matriz arr é formada pelos elementos a , b e c .

Pelo mesmo motivo, docCodeArr é uma matriz, feita do valor de imgCodeStr split em # . Isso é tudo o que existe para isso.

Tenha em atenção que, se o valor de imgCodeStr contiver caracteres-curinga (caracteres entre \[?* ), a shell expandirá o padrão de caracteres curinga para os nomes dos ficheiros correspondentes. Para evitar isso, coloque set -f antes dessa linha para desativar a expansão de curingas. Se você precisar reabilitar a expansão de curingas, use set +f .

    
por 27.03.2017 / 16:14