설정되지 않은 경우 선행 콜론을 생성하지 않고 PATH와 같은 변수에 추가됩니다.

설정되지 않은 경우 선행 콜론을 생성하지 않고 PATH와 같은 변수에 추가됩니다.

에 디렉토리를 추가해야 합니다 PKG_CONFIG_PATH. 일반적으로 표준을 사용합니다.

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig

하지만 PKG_CONFIG_PATH이전에는 내 시스템에 설정되지 않았습니다. 따라서 변수는 :현재 디렉터리를 먼저 찾도록 지시하는 문자로 시작합니다. 나는 그것을 원하지 않습니다. 저는 다음과 같은 점을 결정했습니다.

export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig

그런데 너무 못생겼어요. 더 좋은 방법이 있나요? 변수가 설정된 경우에만 조건부로 콜론을 추가하는 적절한 방법은 무엇입니까?

답변1

스프레드 연산자를 올바르게 사용했습니다 ${:+}. 약간만 수정하면 됩니다.

V=${V:+${V}:}new_V

첫 번째 중괄호는 다음으로 확장됩니다.$V 그리고콜론 iff는 V이미 비어 있음으로 설정되어 있습니다. 이는 정확히 필요한 것입니다(그리고 아마도 연산자가 존재하는 이유 중 하나일 것입니다).

귀하의 경우에는 다음과 같습니다.

export "PKG_CONFIG_PATH=${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}$(pyenv prefix)/lib/pkgconfig"

답변2

최근에 설정을 했는데요GNU 저장소라이브러리와 같이 사용자 범위 항목을 저장하는 내 컴퓨터에서 ~/.local정의하는 데 문제가 있었고 실수로 거기에 콜론을 넣어서 문제가 발생했습니다.LD_LIBRARY_PATHCPATHLIBRARY_PATH

그러다가 귀하의 질문에 대한 답변이 완전히 정확하지 않다는 것을 알게되었습니다.우아한;-), 저는 이것을 처리하기 위해 작은 함수를 작성했습니다. 여기에서 찾으십시오:https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a

## Copyright (C) 2018 Alex Thiessen <[email protected]>
## Copyright (C) 2018 https://unix.stackexchange.com/users/116858/kusalananda
## SPDX-License-Identifier: GPL-2.0-or-later
## <https://spdx.org/licenses/GPL-2.0-or-later.html>

function join() {
    if [ ${#} -eq 0 ]
    then
        echo "\`join\` appends elements separated by colons to a \`bash\` variable " >&2
        echo "usage: join <variable> <element> [element ...]" >&2
        return 1
    fi
    variable="${1}"

    shift
    export ${variable}="${!variable:+${!variable}:}$(IFS=:; echo "${*}")"
}

// @Kusalananda가 제안한 대로 편집됨

관련 정보