設定されていない場合は、先行コロンを生成せずに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すでに空に設定されています。これはまさに必要です(そしておそらく演算子が存在する理由の1つです)。

あなたの場合は次のとおりです。

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が提案したように編集されました

関連情報