J'ai besoin d'ajouter un répertoire à PKG_CONFIG_PATH
. Normalement, j'utiliserais la norme
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
mais PKG_CONFIG_PATH
n'a pas été précédemment configuré sur mon système. Par conséquent, la variable commence par un :
caractère, qui lui indique de rechercher d'abord dans le répertoire courant. Je ne veux pas ça. Je me suis installé sur ce qui suit,
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
mais cela semble tellement moche. Y a-t-il une meilleure façon? Quelle est la façon appropriée d'ajouter les deux points conditionnellement si et seulement si la variable a déjà été définie?
bash
variable-substitution
scottbb
la source
la source
Réponses:
Vous êtes sur la bonne voie avec l'
${:+}
opérateur d'expansion, il vous suffit de le modifier légèrement:Les premières accolades s'étendent jusqu'à
$V
et leV
signe deux-points est déjà défini autrement à rien - ce qui est exactement ce dont vous avez besoin (et probablement aussi l'une des raisons de l'existence de l'opérateur).Ainsi dans votre cas:
la source
${V}${V:+:}W
rapport${V:+${V}:}W
. Quoi qu'il en soit, ils se sentent tous les deux vraiment laids. J'espérais quelque chose ... plus élégant, je suppose?test
- de toute façon vous testez la valeur et écrivez le nom de variable deux fois, mais de cette façon vous le faites dans une seule instruction d'exécution - de cette façon, c'est pratique , mais je n'ai jamais rencontré un ordinateur élégant .export
. C'est un très bon point, j'ai également vexé ce détail.Ces derniers temps, je mis en place Stow GNU sur mes machines pour stocker des choses à l' échelle utilisateur comme les bibliothèques sous
~/.local
et RAN dans des problèmes lors de la définitionLD_LIBRARY_PATH
,CPATH
etLIBRARY_PATH
, par inadvertance mettre un là deux points et donc le casser.Ensuite, j'ai trouvé votre question et la réponse n'était pas exactement élégante ;-), et j'ai écrit une petite fonction pour gérer cela, veuillez la trouver ici: https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
// modifié comme suggéré par @Kusalananda
la source
( IFS=:; set -- 1 2 3 4 5 6; echo "$*" )
join () { var=$1; shift; export "$var"="$( IFS=:; echo "$*" )"; }
${!variable:+${!variable}:}
au bon endroit a fonctionné pour moi, tous les tests ont réussi. Trouver un nom approprié est une exersize pour le lecteur :)