在命令替换中使用 sqsh 出现意外的空格

在命令替换中使用 sqsh 出现意外的空格

下面的 shell 脚本指令表现得很奇怪

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之前立即执行操作wget,并在调用set +x之后立即执行操作,以查看如何wget调用。

问题是 shell 的分词:

${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// /}"

相关内容