저는 스크립팅을 처음 접했습니다. 예를 들어 아래에 제공된 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을 입력한 위치를 추가하여 문제를 해결하세요 .