Necesito agregar un directorio a PKG_CONFIG_PATH
. Normalmente, usaría el estándar
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
pero PKG_CONFIG_PATH
no se ha configurado previamente en mi sistema. Por lo tanto, la variable comienza con un :
carácter, que le dice que busque primero en el directorio actual. No quiero eso. Me decidí por lo siguiente,
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
Pero eso parece tan feo. ¿Hay una mejor manera? ¿Cuál es la forma apropiada de agregar condicionalmente los dos puntos si y solo si la variable ya se ha establecido?
bash
variable-substitution
scottbb
fuente
fuente
Respuestas:
Está en el camino correcto con el
${:+}
operador de expansión, solo necesita modificarlo ligeramente:Las primeras llaves se expanden
$V
y los dos puntos iffV
ya están configurados de otra manera en nada, que es exactamente lo que necesita (y probablemente también una de las razones de la existencia del operador).Así en tu caso:
fuente
${V}${V:+:}W
vs${V:+${V}:}W
. De cualquier manera, ambos se sienten realmente feos. Esperaba algo ... más elegante, supongo.test
- de cualquier manera está probando el valor y escribiendo el nombre de var dos veces, pero de esta manera lo hace en una sola declaración de ejecución - de esa manera es práctico , pero nunca he conocido una computadora elegante .export
. Ese es un muy buen punto, también expresé ese detalle.Últimamente, configuré GNU para guardar en mis máquinas para almacenar cosas de todo el usuario, como bibliotecas,
~/.local
y me encontré con problemas al definirLD_LIBRARY_PATH
,CPATH
yLIBRARY_PATH
sin querer poner dos puntos allí y romper cosas.Luego encontré su pregunta y la respuesta no fue exactamente elegante ;-), y escribí una pequeña función para manejar esto, por favor encuéntrela aquí: https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
// editado según lo sugerido por @Kusalananda
fuente
( IFS=:; set -- 1 2 3 4 5 6; echo "$*" )
join () { var=$1; shift; export "$var"="$( IFS=:; echo "$*" )"; }
${!variable:+${!variable}:}
en el lugar correcto funcionó para mí, todas las pruebas pasaron. Encontrar un nombre apropiado es un exersize para el lector :)