${PATH:+:${PATH}} とはどういう意味ですか?

${PATH:+:${PATH}} とはどういう意味ですか?

私は最近私のcygwinプロファイルでより正確に次のようなものを見つけました。

/usr/local/bin:/usr/bin${PATH:+:${PATH}}

どういう意味ですか?なぜ$ PATHだけを使用しないのですか? 「$PATHが存在する場合は追加:$PATH」ですか?私の意図は、順序を変更し、Windowsパスの後にcygwinパスを置くことです。以前はそうでした。

$PATH:/usr/local/bin:/usr/bin

しかし、これが私を混乱させます。おそらく私がしなければならないと思います。

PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"

$PATH の末尾に以下を追加します。

ベストアンサー1

これは:+フォームです。パラメータ拡張:

${パラメータ:+[単語]}:代替値を使用します。

引数が設定されていないか、nullの場合、nullが置き換えられます。それ以外の場合は、単語の拡張(または単語が省略されている場合は空の文字列)を置き換える必要があります。

つまり、変数が$var定義されていればecho ${var:+foo}その変数が印刷されfoo、そうでなければ空の文字列が印刷されます。

二つ目は:特別なことはありませんでした。ディレクトリリストの区切り文字として使用される文字$PATH。したがって、PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"簡単な方法は次のとおりです。

if [ -z "$PATH" ]; then
    PATH=/usr/local/bin:/usr/bin
else
    PATH=/usr/local/bin:/usr/bin:$PATH
fi

:これは、設定されていない場合に追加のコンテンツを追加しないようにする賢い方法です。$PATHたとえば、

$ PATH="/usr/bin"
$ PATH="/new/dir:$PATH" ## Add a directory
$ echo "$PATH"
/new/dir:/usr/bin

ただし、PATH設定されていない場合:

$ unset PATH
$ PATH="/new/dir:$PATH"
$ echo "$PATH"
/new/dir:

A自体は:現在のディレクトリをに追加します$PATHPATH="/new/dir${PATH:+:$PATH}"もちろん、PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"必要に応じて、またはPATH="$PATH:/usr/local/bin:/usr/bin"必要に応じて使用できます。唯一の違いは、電子が追加のディレクトリを追加して:現在のディレクトリを$PATH

おすすめ記事