2014-04-15 1 views
3

안녕하세요. 문자열을 다른 문자열로 바꾸려고합니다.

이것은 $ 사이트가 이미

PARAM="$SITE,90,1000" 
PARAM=${PARAM//'$SITE'/$SITE} 

를 선언하고있다하지만 유닉스 실행에 표시하기 위해 "\ 원인을이 오류

PARAMS="${PARAMS//"\$SITE"/$SITE}": 0403-011 The specified substitution is not valid for this command. 

을 얻고있다

내 샘플입니다 ?

쉘 스크립트에서 바로 실행하면 작동합니다.

그러나 이러한 매개 변수는 PARAM 변수를 작성하는 텍스트 파일에서 가져옵니다. 결국 나는 exec 프로 시저 (매개 변수, ...)를 sqlplus statment 할;

이 시나리오의 문제점은 무엇입니까?

+0

'$ SITE'의 값은 무엇입니까? – anubhava

+0

$ SITE는 숫자가 – Alkey29

+1

인'set -vx'로 쉘이 각 행을 어떻게 실행하는지 볼 수 있습니다. PARAM = ...에서 사용하는''$ SITE ''는 오류 메시지에 표시되는' "\ $ SITE"'와 같습니다. SITE가 이미 선언되었으므로'PARAM = $ {PARAM // "$ SITE"/ $ SITE}'를 시도하십시오. 행운을 빕니다. – shellter

답변

0

어떨까요?

PARAM=$SITE${PARAM#\$SITE} 

$SITE의 실제 값을 앞에 추가, $PARAM의 시작부터 리터럴 문자열 $ 사이트를 제거합니다.

> SITE=12 
> PARAM='$SITE,90,1000' 
> echo $PARAM 
$SITE,90,1000 
> echo "$SITE${PARAM#\$SITE}" 
12,90,1000 
0

ksh의 버전은 무엇입니까?

$ SITE=42 
$ PARAM='$SITE,90,1000' 
$ echo ${PARAM//\$SITE/$SITE} 
42,90,1000 
$ echo ${PARAM//'$SITE'/$SITE} 
42,90,1000 
$ ksh --version 
    version   sh (AT&T Research) 93u 2011-02-08 
관련 문제