私は最近私の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自体は:
現在のディレクトリをに追加します$PATH
。PATH="/new/dir${PATH:+:$PATH}"
もちろん、PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
必要に応じて、またはPATH="$PATH:/usr/local/bin:/usr/bin"
必要に応じて使用できます。唯一の違いは、電子が追加のディレクトリを追加して:
現在のディレクトリを$PATH
。
答え2
あなたは正しいです。 「$PATH が存在し、空でない場合は、次を追加します。 $PATH」を意味します。
$PATHが定義されていない場合は、先行(または末尾)コロンを追加したくないので、$ PATHが存在することを確認する必要があります。:/usr/local/bin:/usr/bin
、または/usr/local/bin:/usr/bin:
、またはなど、パスに長さが0の(ヌル)ディレクトリ名は、/usr/local/bin::/usr/bin
次のことを意味します。現在のディレクトリの検索。
抜粋man bash
:
PATH ...
A zero-length (null) directory name in the value of PATH indicates
the current directory. A null directory name may appear as two
adjacent colons, or as an initial or trailing colon.
...
これはおそらくあなたがしたいことではありません。
次の2行は同じことを行います。
PATH=":/bin" # search current directory, then /bin
PATH=".:/bin"
答え3
比較も便利です。選ぶそして基本パラメータ拡張。
:-
それを使う${}
と基本次の値:
${a:-xxx} returns "xxx" if a is not defined.
:+
内部を使う${}
と選ぶ次の値:
${a:+xxx} returns "xxx" if a is defined.
したがって、この場合、デフォルトでは定義された値を使用するのではなく、代替値が返されるという${PATH:+${PATH}:}
意味です。PATH
PATH
PATH: