환경 변수 연결 및 추가

환경 변수 연결 및 추가

환경 변수가 있는 경우:

$foo=/my/path/one:/my/path/two

어떻게 설정할 수 있나요?

$bar=${foo}/bin

어디:

$bar=/my/path/one/bin:/my/path/two/bin

?

위에서 수행한 작업은 다음과 같은 작업만 수행합니다(첫 번째 경로에 /bin이 부족하지 않음).

$bar=/my/path/one/:/my/path/two/bin

수동으로 설정하거나 목록에서 반복할 수 있지만 이유 없이 복잡해 보입니다. 이를 수행하는 영리한 한 줄 방법이 있습니까?

답변1

제가 보기에 당신은 이것을 갖고 싶어합니다:

foo=$(echo $foo | sed -e 's@:\|$@/bin&@g'); echo $foo

?

답변2

가장 강력하지는 않지만 아마도 가장 간단한 것은 /bin:매개변수 확장을 사용하여 모든 콜론을 바꾸는 것입니다.

foo=/my/path/one:/my/path/two:/my/path/three

noo=${foo//:/\/bin:}/bin

echo $noo
/my/path/one/bin:/my/path/two/bin:/my/path/three/bin

설명:

이 구문을 사용하면 ${foo}변수에서 다양한 검색 및 바꾸기를 수행할 수 있습니다. 이 경우 패턴 일치를 사용하며 패턴은 슬래시로 구분됩니다. 일반적으로 다음과 같이 할 수 있습니다.

$(foo/findme/replace}

findme그러면 문자열을 찾아 $foo로 바꿀 것입니다 replace.

콜론을 로 바꾸려면 x로 검색할 수 있지만 ${foo/:/x/}첫 번째 것만이 아닌 모두를 바꾸려면 시작 부분에 두 개의 슬래시를 넣습니다. 교체에 슬래시를 사용하려면 백슬래시로 이스케이프 처리해야 합니다.\/

모두 합쳐서 위에 사용된 패턴을 제공합니다(명확성을 위해 공백을 추가했지만 실제 생활에서는 깨질 수 있음).

          <find>   <replace>
${foo  //   :   /   \/bin:  }

나머지는 역사이다.

관련 정보