작동하는 독립적인 중첩 함수/스크립트가 더 큰 스크립트 내에서 작동하지 않는 이유는 무엇입니까? [복사]

작동하는 독립적인 중첩 함수/스크립트가 더 큰 스크립트 내에서 작동하지 않는 이유는 무엇입니까? [복사]

다음 (중첩) 함수

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의 경우seq ${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.

관련 정보