Мне нужно добавить каталог в PKG_CONFIG_PATH
. Обычно я бы использовал стандарт
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
но PKG_CONFIG_PATH
не было ранее установлено в моей системе. Следовательно, переменная начинается с :
символа, который говорит ей сначала искать в текущем каталоге. Я не хочу этого. Я остановился на следующем,
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
но это только кажется таким уродливым Есть ли способ лучше? Как правильно добавить двоеточие по условию, если и только если переменная уже установлена?
bash
variable-substitution
scottbb
источник
источник
Ответы:
Вы находитесь на правильном пути с
${:+}
оператором расширения, вам просто нужно немного его изменить:Первые фигурные скобки расширяются до,
$V
и двоеточие iffV
уже установлено в противном случае в ничто - это именно то, что вам нужно (и, вероятно, также одна из причин существования оператора).Таким образом, в вашем случае:
источник
${V}${V:+:}W
против${V:+${V}:}W
. В любом случае, они оба чувствуют себя ужасно. Я надеялся на что-то ... более элегантное, я полагаю?test
- в любом случае вы проверяете значение и пишете переменную дважды, но таким образом вы делаете это в одном операторе выполнения - таким образом, это практично Но я никогда не встречал элегантный компьютер.export
. Это очень хороший момент, я тоже обдумал эту деталь.В последнее время я установил GNU- хранилище на своих машинах, чтобы хранить под ним пользовательские вещи, такие как библиотеки,
~/.local
и столкнулся с проблемами при определенииLD_LIBRARY_PATH
,CPATH
иLIBRARY_PATH
, непреднамеренно вставив туда двоеточие и таким образом испортив вещи.Тогда я нашел ваш вопрос, и ответ был не совсем элегантным ;-), и я написал небольшую функцию, чтобы справиться с этим, пожалуйста, найдите его здесь: https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
// отредактировано в соответствии с предложением @Kusalananda
источник
( IFS=:; set -- 1 2 3 4 5 6; echo "$*" )
join () { var=$1; shift; export "$var"="$( IFS=:; echo "$*" )"; }
${!variable:+${!variable}:}
в нужном месте сработало для меня, все тесты пройдены. Поиск подходящего имени - это простое упражнение для читателя :)