为什么工作的独立嵌套函数/脚本不能在较大的脚本中工作?

为什么工作的独立嵌套函数/脚本不能在较大的脚本中工作?

以下(嵌套)函数

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"
}

工作正常,无论是作为独立代码还是在脚本内。即hpf_matrix 5 18会返回

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

它甚至可以按照以下要求工作(具有各种值):

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}"

但是,在不进行任何更改的情况下将上述代码片段(函数hpf_matrix并提供"${HPF_MATRIX_ASCII}")集成到更大的 bash 脚本中,会出现错误并显示以下消息:

((: 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 ")

小更新

如果我理解正确的话,无论背后的原因是什么,这条线

对于行输入seq ${Matrix_Dimension}

以及该行

对于 Col inseq ${Matrix_Dimension}

打印为"1 2 3 4 5"而不是"1" "2" "3" "4" "5".

这种情况有什么问题吗? 我想保留该函数的嵌套结构,除非它明显错误。

答案1

在大型脚本中,上述函数被集成为它的一部分,并且在定义该hpf_matrix函数之前,IFS已更改为,IFS=,而在使用之前不小心将其重置回来不带引号的命令替换在函数中!

的解释使用不带引号的命令替换 ($(...)) 而不设置 $IFS这里:https://unix.stackexchange.com/a/88259/13011

这里也有一个解决方案:https://unix.stackexchange.com/a/92188/13011

相关内容