を使用すると、正常に実行される次のスクリプトがあります#!/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
2つのオプションセットを持つ唯一のシェル)。
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
このハッキングに頼る必要はありません。
それ以外には、表示されるエラーメッセージを説明できる内容はありません。