Intereting Posts
Как вы можете получить ping для печати человекообразных временных меток? Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки? определение локали с французским республиканским календарем Мне нужна программа для чтения файлов базы геоданных США. Я хочу использовать переменную, объявленную внутри сеанса SSH, для локального использования в сценарии оболочки Разрешение Slackware Console при двойной загрузке с GRUB2 другого дистрибутива? Скрипт Bash с `set -e` не останавливается по команде`… &&… ` Как выполнить удаленный сценарий с помощью «экранов»? Правило Удева позволяет различать беспроводные и проводные интерфейсы Linux 3.x не удается назначить память PCI BAR настройки sudoers для подключения сетевых ресурсов и устройств loop и разного рода Запуск приложения из терминала Не удалось добавить eth0 в Rhel 7 Почему моя программа на C ++, убитая ОС Выходное видео для перепрограммирования телевизора с графикой Intel

Используйте вложенный var для замены var

У меня сегодня большой вопрос! Я сделал небольшой пример моей ситуации.

FOO="foo"; fooBAR="final"; var=${${FOO}BAR} echo $var 

Я хочу напечатать «final». Я пробовал такие вещи, как $ {$ {! FOO @} BAR} (я знаю, что это не так), и я не нашел решения моей проблемы. В идеале я не хочу проходить через временную переменную / eval.

В любом случае должна быть какая-то оценка кода во время выполнения

 eval "var=\${${FOO}BAR}" printf '%s\n' "$var" 

Или без временного var :

 eval "printf '%s\n' \"\${${FOO}BAR}\"" 

Если вы беспокоитесь о том, что $FOO может содержать другие вещи, кроме имени переменной (например, foo=$(reboot) которая может иметь плохие последствия), вы бы хотели сделать санитацию вручную до того, как:

 valid_variable() { local LC_ALL=C case $1 in ("" | *[![:alnum:]]* | [0-9]*) return 1 esac } valid_variable "${FOO}BAR" || exit 1 eval "printf '%s\n' \"\${${FOO}BAR}\"" 

С помощью zsh вы можете:

 printf '%s\n' ${(P):-${FOO}BAR}} 

но вы все равно хотите дезинфицировать значение $FOO если ему не доверяют, поскольку значения, такие как x[0$(reboot)] все еще будут проблемой.

Это было для передачи аргумента другой функции, лучший способ, который я нашел:

 local CLIENT_URL="${CLIENT}_URL" local CLIENT_FOLDER="${CLIENT}_FOLDER" local CLIENT_BIN_PATH="${CLIENT}_BIN_PATH" installClient ${UPDATE_OS_PACKAGES}\ ${USER_NAME}\ ${GROUP_NAME}\ ${!CLIENT_URL}\ ${!CLIENT_FOLDER}\ ${!CLIENT_BIN_PATH} 

По этой причине я не хотел использовать временные var или eval. (Извините, ответьте через 2 недели после.)

пытаться

 var=${FOO}BAR ## to print eval echo \$$var ## to set somevar=$(eval echo \$$var)