Por que uma função / script aninhado autônomo de trabalho não funciona dentro de um script maior? [duplicado]

0

A seguinte função (aninhada) / s

function hpf_matrix {

  # Positional Parameters
  Matrix_Dimension="${1}"
  Center_Cell_Value="${2}"

  # Define the cell value(s)
  function hpf_cell_value {
    if (( "${Row}" == "${Col}" )) && (( "${Col}" == 'echo "( ${Matrix_Dimension} + 1 ) / 2" | bc' ))
      then echo "${Center_Cell_Value} "
      else echo "-1 "
    fi
  }

  # Construct the Row for Cols 1 to "Matrix_Dimension"
  function hpf_row {
    for Col in 'seq ${Matrix_Dimension}'
      do echo -n "$(hpf_cell_value)"
    done
  }

  # Construct the Matrix
  echo "MATRIX    ${Matrix_Dimension}"
  for Row in 'seq ${Matrix_Dimension}'
    do echo "$(hpf_row)"
  done
  echo "DIVISOR   1"
  echo "TYPE      P"
}

funciona bem, como um código independente e dentro de um script. Ou seja hpf_matrix 5 18 retornará

MATRIX    5
-1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 
-1 -1 18 -1 -1 
-1 -1 -1 -1 -1 
-1 -1 -1 -1 -1 
DIVISOR   1
TYPE      P

e funcionará (com vários valores) conforme solicitado em:

Kernel_Size=5
Center_Cell_Default=18 ; Center_Level=Default
eval Center_Cell="Center_Cell_${Center_Level}"

HPF_MATRIX_ASCII='hpf_matrix ${Kernel_Size} ${!Center_Cell}'
echo "${HPF_MATRIX_ASCII}"

No entanto, integrar sem alterações as partes de código acima (a função hpf_matrix e alimentar o "${HPF_MATRIX_ASCII}" ) dentro de um script bash maior, elimina erros com a seguinte mensagem:

((: 1
2
3
4
5 == 1
2
3
4
5 : syntax error in expression (error token is "2
3
4
5 == 1
2
3
4
5 ")

Atualização menor

Se eu entendi corretamente, por qualquer que seja a razão por trás, a linha

para linha em seq ${Matrix_Dimension}

bem como a linha

para Col em seq ${Matrix_Dimension}

são impressos como "1 2 3 4 5" em vez de "1" "2" "3" "4" "5" .

O que há de errado neste caso? Eu gostaria de manter uma estrutura aninhada para a função, a menos que esteja claramente errada.

    
por Nikos Alexandris 04.11.2013 / 16:20

1 resposta

1

No script grande, no qual a função acima foi integrada para funcionar como parte dela e antes de definir a função hpf_matrix , a IFS foi alterada para IFS=, sem ter o cuidado de redefini-la novamente antes de usar a substituição de comando sem aspas na função!

Uma explicação sobre Usando a substituição de comando sem aspas ($ (...)) sem definir $ IFS aqui: link .

Uma solução para isso também aqui: link .

    
por 04.11.2013 / 21:46