을 사용하면 성공적으로 실행되는 다음 스크립트가 있습니다 #!/usr/bin/env bash
.
동일한 스크립트가 점점일치 항목을 찾을 때 예기치 않은 EOF가 발생했습니다."
사용 중 오류가 발생했습니다 #!/bin/ksh
.
왜 그런 겁니까?
#!/usr/bin/env bash
#--------------------
# Command variables
#--------------------
ECHO=/usr/bin/echo
SED=/usr/bin/sed
EXPR=/usr/bin/expr
EGREP=/usr/bin/egrep
DATE=/usr/bin/date
CUT=/usr/bin/cut
#--------------------
# Local variables
#--------------------
shopt -s extglob
SHELLNAME=$(basename $0)
GRANT_RAW_AMT=''
GRANT_AMT=0
GRANT_FILE=''
FILE_BN=''
COMPANY=''
EMAIL_GRANT=''
EMAIL_RECIPIENTS=$(${ATAS_SHELL}/get_global_constant.sh RESP RESP_CASH_RECIEPT)
EMAIL_RETURN=$(${ATAS_SHELL}/get_global_constant.sh RESP CASH_RECEIPT_SENDER)
RESP_DIR=${ATAS_RESP}/$(${ATAS_SHELL}/get_global_constant.sh RESP RESPDIR)
RESP_LOG=${ATAS_RESP}/log/${0##*/}.$(/usr/bin/date +%y%m%d).$(/usr/bin/date +%H%M).log
#--------------------------------------------
# Determine the amount of grant for the company
#--------------------------------------------
GRANT_RAW_AMT=000078753603
unpadded_amt=${GRANT_RAW_AMT##+(0)} # trim leading 0's -- otherwise a value that starts with
# 0s can be treated as octal rather than decimal.
printf -v GRANT_AMT '%d.%02d' "$(( unpadded_amt / 100 ))" "$(( unpadded_amt % 100 ))"
EMAIL_GRANT=${EMAIL_GRANT}${COMPANY}'\t$'${GRANT_AMT}'\n'
${ECHO} ${EMAIL_BODY1}${EMAIL_GRANT}
#--------------------------------------------
# End of Program
#--------------------------------------------
echo >> ${RESP_LOG}
${ECHO} "${SHELLNAME} completed"
exit 0
답변1
shopt -s extglob
bash에만 해당됩니다( shopt
bash에만 해당되며 bash
두 가지 옵션 세트가 있는 유일한 셸).
extglob
bash
ksh 확장 glob에 대한 지원을 활성화하는 옵션입니다 . ksh에서는 필요하지 않지만 ksh에서는 이러한 glob이 변수에 사용될 때 인식되지 않습니다.
printf -v
확장 입니다 bash
. ksh93에서는 명령 대체가 하위 쉘을 포크하지 않기 때문에 지원되지도 않고 필요하지도 않습니다. 그래서 대신:
printf -v var ...
사용
var=$(printf ...)
또는 ksh93에서:
var=${ printf ...;}
if에 대한 인수는 printf
환경(예: in ${foo=bar}
또는 $((n++))
)을 변경해야 합니다. (그러나 후행 개행 문자는 제거됩니다.)
또한 ksh93은 ksh93과 달리 부동 소수점 연산을 지원하므로 bash
이 해킹에 의존할 필요가 없습니다.
그 외에는 표시되는 오류 메시지를 설명할 수 있는 내용이 없습니다.