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.