POSIXly:
set -- /<root_path>/<process_two_path>/logs/*
shift "$(($# - 1))"
printf '%s\n' "$1"
Так как Вы упоминаете zsh
:
print -r /<root_path>/<process_two_path>/logs/*([-1])
Вы находитесь на правильном пути с оператором расширения $ {: +}
, вам просто нужно немного изменять:
V=${V:+${V}:}new_V
Первые скобки расширяются до $ V
и Комплектная кишка IFF V
уже в противном случае - это именно то, что вам нужно (и, вероятно, также одна из причин существования оператора).
Таким образом, в вашем случае:
export "PKG_CONFIG_PATH=${PKG_CONFIG_PATH:+${PKG_CONFIG_PATH}:}$(pyenv prefix)/lib/pkgconfig"
Недавно я настроил GNU stow на своих машинах для хранения пользовательских -обширных материалов, таких как библиотеки под ~/.local
, и столкнулся с проблемами при определении LD_LIBRARY_PATH
, CPATH
и LIBRARY_PATH
, нечаянно поставив там двоеточие и так разбивая вещи.
Затем я нашел ваш вопрос, и ответ был не совсем элегантным ; -), и я написал для этого небольшую функцию, ее можно найти здесь:https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
## Copyright (C) 2018 Alex Thiessen <alex.thiessen.de+github@gmail.com>
## Copyright (C) 2018 https://unix.stackexchange.com/users/116858/kusalananda
## SPDX-License-Identifier: GPL-2.0-or-later
## <https://spdx.org/licenses/GPL-2.0-or-later.html>
function join() {
if [ ${#} -eq 0 ]
then
echo "\`join\` appends elements separated by colons to a \`bash\` variable " >&2
echo "usage: join <variable> <element> [element...]" >&2
return 1
fi
variable="${1}"
shift
export ${variable}="${!variable:+${!variable}:}$(IFS=:; echo "${*}")"
}
// отредактировано по предложению @Kusalananda