J'ai récemment remarqué ce qui suit dans mon profil cygwin, plus précisément:
/usr/local/bin:/usr/bin${PATH:+:${PATH}}
Qu'est-ce que ça veut dire? Pourquoi n'est-il pas seulement $ PATH? S'agit-il d'un 'si $ PATH existe alors ajoutez: $ PATH'? Mon but est d'échanger la commande et de mettre les chemins cygwin derrière le chemin Windows. Dans le passé, j'aurais
$PATH:/usr/local/bin:/usr/bin
mais cela me confond. Peut-être que je devrais faire
PATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
ajouter le: à la fin du $ PATH?
shell
path
variable-substitution
tofutim
la source
la source
Réponses:
Le
:+
est une forme d' expansion des paramètres :En d'autres termes, si la variable
$var
est définie,echo ${var:+foo}
sera impriméefoo
et, si ce n'est pas le cas, elle imprimera la chaîne vide.Le second
:
n'a rien de spécial. Il s'agit du caractère utilisé comme séparateur dans la liste des répertoires de$PATH
. Donc,PATH="/usr/local/bin:/usr/bin${PATH:+:${PATH}}"
c'est une façon abrégée d'écrire:C'est juste une astuce astucieuse pour éviter d'ajouter un supplément
:
quand il$PATH
n'est pas défini. Par exemple:Mais si
PATH
n'est pas défini:A
:
ajoute lui-même le répertoire courant au$PATH
. L'utilisationPATH="/new/dir${PATH:+:$PATH}"
évite cela. Alors bien sûr, vous pouvez utiliserPATH="${PATH:+${PATH}:}/usr/local/bin:/usr/bin"
si vous le souhaitez, ou vous pouvez utiliserPATH="$PATH:/usr/local/bin:/usr/bin"
si vous préférez. La seule différence est que le premier peut ajouter un extra:
, ajoutant ainsi votre répertoire actuel à votre$PATH
.la source
:
nuisible?$PATH
(voir la réponse de @ AndyB ). Cela peut être un risque pour la sécurité dans certaines situations (par exemple, un attaquant a téléchargé un script destructeur dans votre répertoire actuel et l'a nomméls
ou quelque chose), mais dans la plupart des cas, cela ne vous dérange pas vraiment. En fait, certains systèmes ajoutentPATH
quand même le répertoire courant au par défaut.csh
gèrent comme un tableau.Vous avez raison, cela signifie «si $ PATH existe - et n'est pas nul - alors ajoutez: $ PATH».
Vous devez vérifier si $ PATH existe parce que vous ne voulez pas ajouter le signe deux-points de tête (ou de fin) si $ PATH n'est pas défini. Un nom de répertoire de longueur nulle (null) dans le chemin, comme dans
:/usr/local/bin:/usr/bin
, ou/usr/local/bin:/usr/bin:
, ou/usr/local/bin::/usr/bin
, signifie rechercher dans le répertoire actuel .Extrait de
man bash
:Ce n'est probablement pas ce que vous voulez faire.
Les deux lignes suivantes font la même chose:
la source