매개변수 확장을 사용하여 다른 확장의 출력 수정

매개변수 확장을 사용하여 다른 확장의 출력 수정

Bash 매개변수 확장을 사용하여 명령 대체 또는 기타 매개변수 확장의 출력을 수정하려고 합니다.

다음 중첩 확장은 Zsh에서는 잘 작동하지만 Bash에서는 "잘못된 대체" 오류를 발생시킵니다.

${${PWD##*/}//trunk/latest}

또는

${$(basename $PWD)//trunk/latest}

출력은 마지막 폴더여야 하며 현재 디렉터리가 다음과 같을 때 $PWD대체됩니다 .latesttrunk

그래서 /home/user/trunk그것은되어야한다latest

변수나 파이프에 의존하지 않고 체인 확장을 허용하는 Bash와 동등한 것이 있습니까? 아니면 Bash 확장은 문자열이나 일반 변수만 입력하도록 허용합니까?

답변1

아니요, 대체 연산자의 중첩은 입니다 zsh.

zshlike with 를 사용하여 (t)csh이 작업을 수행할 수도 있습니다 ${PWD:t:s/trunk/latest/}.

csh 기록 수정자는 기록 확장에도 지원 되지만 bash매개변수 확장은 지원하지 않습니다.

여기서는 임시 변수가 사용됩니다 bash.

var=${PWD##*/} var=${var//trunk/latest}

답변2

Bash로 이것을 시도해 보세요:

[[ $PWD =~ .*/(.*) ]] && echo "${BASH_REMATCH[1]//trunk/latest}"

또는 다음 명령을 사용하십시오.

[[ $PWD =~ .*/(.*) && ${BASH_REMATCH[1]//trunk/latest} =~ (.*) ]]

결과는${BASH_REMATCH[1]}

답변3

당신은...?

PWD=latest

귀하의 요구 사항을 충족시킬 방법이 없습니다. 모든 것을 최신 버전으로 교체하고 싶다면 $PWD가장 좋은 방법은 cd최신 버전을 사용하는 것입니다.

[ /home/user/trunk = "$PWD" ] && OLDPWD=../latest cd -

...이렇게 하면 최신 버전으로 이동하고 경로 이름을 표준 출력으로 인쇄합니다. 다시 수행하면 이전 위치로 돌아갈 수 있습니다 cd -. 다음 명령을 사용하여 동일한 작업을 수행할 수 있습니다 $CDPATH.

mkdir -p /tmp/{1..5}  ; \
CDPATH=/tmp cd 3; cd -; \
echo "${CDPATH:-empty or unset::}" "$OLDPWD"

/tmp/3
/home/mikeserv
empty or unset:: /tmp/3

관련 정보