2014-11-18 2 views
-1

bash에서 ksh로 코드를 변환하는 방법을 알고있는 튜토리얼이 있습니까? 이 코드 줄을 korn에 어떻게 써야합니까?bash에서 ksh로

export TYPE_CANAL=$(echo $TYPE | sed "s/${TYPE_APACHE// /\\|}//g") 

최종 편집 : 라인 코드의

설명 :

TYPE_APACHE은 $ {TYPE_APACHE ///\ |} 다음 "ABC의 BCD"이면 될 것 "ABC는 \ | BCD". double을 사용하는 변수 확장은 ""(공백 문자)를 \로 전역 대체합니다.

두 변수 ($ TYPE 및 $ TYPE_APACHE)가 있습니다. $ TYPE_APACHE의 모든 값은 $ TYPE에 포함됩니다. $ TYPE_APACHE에있는 값을 제외한 모든 값과 함께 TYPE_CANAL_TMP라는 새 변수를 원합니다.

+0

나는 KornShell을 모른다. 하지만 KornShell은 Bash와 호환 가능합니다. #! Shebang을 변경 했습니까? – johnnyevolunium

+0

또한보십시오 http://stackoverflow.com/questions/26761744/do-sed-to-delete-only-if-exist-variable – tripleee

+1

@johnnyevolunium'ksh'와 배쉬는 서로 호환되지 않습니다. 'ksh '에서는 사용할 수없는 Bash 전용 기능이 있으며 그 반대도 마찬가지입니다. – tripleee

답변

0

명령에서 $TYPE을 올바르게 인용하지 않으므로 공백을 공백으로 쓸어 넘기 게됩니다. 그게 의도적 인거야? 나는 그 코드의 일부만 변경한다고 가정하고있다.

명령에 $TYPE_APACHE의 공백이 있으면 \\|으로 바꾼 다음 제거 할 문자열의 정규 표현식으로 sed으로 전달합니다. 즉,이뿐만 아니라 ksh에서 지원되는, 배열을 더 우아하게 많은 일을하지만,이 코드를 해결하기 위해 예상되는 문제에 대한 적절한 설명없이 될 수

배쉬에서
TYPE_CANAL=$(echo "$TYPE" | sed "s/$(echo "$TYPE_APACHE" | sed 's/ /\\|/')//g") 
export TYPE_CANAL 

으로 이식 할 수 있습니다 우리가 추측해야 할 곳이 너무 많습니다.

0

다음에 입력 및 출력 예제를 게시하십시오.

TYPE="a1 a2 a3 a4 a5 a6" 
TYPE_APACHE="a2 a4 a5" 

TYPE_CANAL_RAW="" 
for type in ${TYPE}; do 
    echo ${type} 
    if [[ ${TYPE_APACHE} != *${type}* ]]; then 
     TYPE_CANAL_RAW="${TYPE_CANAL_RAW} ${type}" 
    fi 
done 
TYPE_CANAL=${TYPE_CANAL_RAW# } 

나는 당신이에 대한 루프를 피하기 위해 을 시도 위가 아닌 코드에서 기능을해야한다고 생각 : 나는 당신이 다음 원하는 생각합니다. 당신이 정말로 그것을 변경해야하는 경우 , 당신은 sed를 사용하려고하면

echo ${TYPE} | sed -e 's/a2//' -e 's/a4//' -e 's/a5//' -e 's/ */ /g' 

처럼 나오지 문자열 모습 TYPE_ARCHIVE에 특수 문자에주의해야합니다.