Precisa decodificar esta linha {$ HOSTNAME ^^} == {$ arrName ^^}

1

A seguir, uma parte de um script de shell escrito por alguém da minha organização.

while read -r line
do
    #split if needed
    arrName=$(echo $line | cut -d"." -f1)
    if [ {$HOSTNAME^^} == {$arrName^^} ]; then
        echo "Perfect $arrName"
        echo "$1" >> $TEMPFILE
    fi
done < compuetrnames.txt

O script inteiro era compreensível para mim, exceto esta linha

if [ {$HOSTNAME^^} == {$arrName^^} ]; then

Alguém pode me ajudar a entender essa linha?

    
por ramp 20.04.2017 / 17:47

2 respostas

2

${variable^^} é uma expansão de parâmetro do Bash 4.x que produz o valor da variável convertido em maiúsculas.

O cifrão precisa ir antes da chave de abertura, não depois.

O (% indevidamente cotado) echo | cut pipeline poderia similarmente ser escrito com uma expansão de parâmetro ${line%%.*} ; ou você pode usar while IFS='.' read line _; do ... para dividir a entrada no primeiro ponto final imediatamente ao lê-la.

    
por 20.04.2017 / 17:49
2

A substituição ${parameter^^pattern} no Bash mudará o caso dos caracteres em $parameter que correspondem ao padrão de globbing pattern para letras maiúsculas.

Sem padrão, altera o caso de todos os caracteres em $parameter .

Como tripleee apontou em sua resposta, {$...} é um erro de sintaxe, ou melhor, {$HOSTNAME^^} expandirá para a string {hostname^^} se seu valor $HOSTNAME for hostname .

    
por 20.04.2017 / 17:53