다음 (중첩) 함수
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.