ksh에서 SQL 쿼리의 출력을 추가할 때 출력이 손상됨

ksh에서 SQL 쿼리의 출력을 추가할 때 출력이 손상됨

저는 스크립팅을 처음 접했습니다. 예를 들어 아래에 제공된 SQL 함수의 출력을 다른 변수에 추가하고 싶습니다.

month_end ()
{
mdate=$($SQLPLUS_HOME/sqlplus.exe -S $DBC  << END
set pagesize 0 feedback off verify off heading off echo off;
select to_char(last_day(add_months(sysdate,-1)),'yyyymmdd') from dual;
exit;
END
)
}

$mdate의 출력을 에코하면 완벽합니다. (20160531)

하지만 다른 변수에 추가하면 전체 값이 깨집니다(Hello_20160531_WORLD.txt 대신 _WORLD.txt).

FILENAME=Hello
EXTENSION=WORLD.txt
NAME=$FILENAME_${mdate}_${EXTENSION}

echo ${NAME}

답변1

밑줄은 _변수 이름의 유효한 부분이므로 다음과 같이 중괄호도 필요합니다 FILENAME.

NAME=${FILENAME}_${mdate}_${EXTENSION}

\r귀하의 다른 응답에 따르면 FILENAME 할당 줄이나 sqlplus의 출력에 캐리지 리턴( )이 있는 것으로 보입니다 $mdate. 쉘 스크립트를 실행 cat -v하거나 echo $mdate | cat -v. 방금 sqlplus를 발견했기 때문에.exe, 캐리지 리턴을 추가할 수 있는 Cygwin과 유사한 환경에서 실행 중이라고 가정합니다. mdate=${mdate//^M/}control-v, control-m을 입력하여 ^M을 입력한 위치를 추가하여 문제를 해결하세요 .

관련 정보