コマンド置換で 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// /}"

おすすめ記事