명령 대체에서 sqsh를 사용할 때 예기치 않은 공백이 나타납니다.

명령 대체에서 sqsh를 사용할 때 예기치 않은 공백이 나타납니다.

다음 쉘 스크립트 지침이 이상하게 작동합니다.

ARG_DATE=`sqsh -S $SERVER -U $DB_USER -P $DB_PASSWORD -D dbname -h<<END
SET NOCOUNT ON
go
select convert(varchar, PRIOR_COB_DATE, 112) from TABLE
go
END`
echo $ARG_DATE

if [ "${ARG_DATE}" != "1" ] && [ "${ARG_DATE}" != " " ]; then
    if [ ${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1" ]; then
        PRIOR_POSITION_DATE=${ARG_DATE}
        echo "assigned " $PRIOR_POSITION_DATE
    else
        echo "Date must be in follow format: YYYYMMDD"
        echo "POSITION_DATE will be used."
    fi
fi



URL_PARAMS="HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=${PRIOR_POSITION_DATE}"
    echo $URL_PARAMS
    echo ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
        wget -o ${CONNECTION_STATUS_FILE} "http://${SERVER_ADDRESS}:${SERVER_PORT}/HTTP/${URL_PARAMS}"
        if [ -f ${CONNECTION_STATUS_FILE} ]; then
            RESPONSE_STATUS=`grep -o '200 OK' ${CONNECTION_STATUS_FILE}`
            if [ -z "${RESPONSE_STATUS}" ]; then
                echo Login failed.
                exit 3
            fi
        #    rm ${CONNECTION_STATUS_FILE}
        fi

wget을 실행하는 동안 공백 데이터베이스 프로시저가 데이터베이스 날짜의 문자열을 변환할 수 없기 때문에 많은 공백이 발생합니다. sed공백을 제거할 수 있지만 가능한 이유를 알고 싶습니다.

로그인 CONNECTION_STATUS_FILE

http://XXXXX:7001/MYAPP/HttpAutosysJobExecutor/NotificationEmailGenerator.job?prior_cob_date=%2020130523%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20

답변1

echo후행 공백은 표시 되지 않습니다 . 이를 위해서는 이와 같은 것이 필요합니다 echo "${URL_PARAMS}x". 통화 set -x직전 작업 wgetset +x통화 직후 작업을 수행하여 wget통화가 어떻게 작동하는지 확인할 수 있습니다.

문제는 쉘의 단어 분할입니다.

${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1} = "1"

바꾸다

"${ARG_DATE/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/1}" = "1"

해결책은 (고정) 줄 앞에 놓는 것입니다.

ARG_DATE="${ARG_DATE// /}"

관련 정보