2012-03-06 4 views
3

나는 KornShell (ksh)에서 스크립트 작업을하고있다. 내 데이터베이스 연결은 SQLPLUS를 통해 Oracle 9i 데이터베이스로 연결됩니다. 연속적인 공백이 자동으로 단 하나의 문자로 잘리는 것을 제외하고는 쉘 변수에 DB 값을 가져 오는 데 아무런 문제가 없었습니다.백틱을 사용할 때 KornShell 스크립트에서 공백을 어떻게 유지할 수 있습니까?

MY_VAR=`sqlplus -s usr/[email protected] << ! 
set heading off; 
set pagesize 0; 

select a_value from a_table where an_index = 25; 
!` 

데이터베이스의 실제 데이터는 다음과 같이이다 :

Dec 15 09:19:10 <24:0070> User record (5 XATY  41839FG8 58775HK9AFF) is invalid for this condition 

내 코드 예제는 위의이 같은 값을 돌려줍니다 여기

내 코드의 예입니다 :

Dec 15 09:19:10 <24:0070> User record (5 XATY 41839FG8 58775HK9AFF) is invalid for this condition 

간격은 내가 작업 할 작업에 중요합니다.

도움을 주셔서 감사합니다.

답변

5

먼저, 1995 년에 출판 된 'The New Kornshell Programming Language'에 따라 더 이상 사용하지 않는 백틱을 사용하지 마십시오! 그 대신, 쉬운 대체 명령 버전 인 $(yourCmd goes here)을 사용하십시오.

변수 $ MY_VAR을 어떻게 사용하고 있는지 표시하지 마십시오. 당신이

echo $MY_VAR > outputFile 

말을하면 당신은

print -- "$MY_VAR" > outputFile 

Print는 에코에 KSH 메이저 업그레이드 인 즉, 변수를 인용 할 필요가 있지만, 사용하는 습관을 가지고하는 것이 가장 좋습니다 '-'사이 원하는 명령과 문자열을 print. 인쇄하려는 문자열의 '-'문자는 루프에 대해 print 명령을 사용할 수 있습니다 (즉, '-'없음).

또한 MY_VAR하는 할당을 인용해야 할 수도 있습니다

, 즉

MY_VAR="$(sqlplus -s usr/[email protected] <<-EOD 
set heading off; 
set pagesize 0; 

select a_value from a_table where an_index = 25; 
EOD 
)" 

나는대로, EOD로 전환했습니다! char는 많은 쉘에서! $ (이전 행의 마지막 단어)와 같은 표기법에 사용되므로, 왜 물건을 혼동 하는가?

미래를위한 참고 사항 : 여기 StackOverflow에서 사용할 수있는 ksh 용 태그가 있습니다. Shell은 ver이 모호하며 Windows cmd.com과 zsh를 의미 할 수 있습니다.

이 정보가 도움이되기를 바랍니다.

+1

빠른 답변 주셔서 감사합니다. 필자가해야 할 일은 변수를 사용할 때 큰 따옴표를 넣어서 모든 문제를 해결했습니다. –

관련 문제