저는 스크립팅을 처음 접했습니다. 아래에 제공된 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}
귀하의 다른 응답에 따르면 쉘 스크립트를 실행하거나 sqlplus를 실행하여 \r
FILENAME 할당 줄이나 sqlplus 출력에 캐리지 리턴( )이 있는 것으로 보입니다 .$mdate
cat -v
echo $mdate | cat -v
exe, 캐리지 리턴이 추가될 수 있는 Cygwin과 유사한 환경에서 실행 중이라고 가정합니다. mdate=${mdate//^M/}
^M이 입력된 곳에 control-v, control-m을 추가하여 이 문제를 해결하세요.