Виртуальный носитель по IPMI, но это зависит, если Ваш сервер является реальным сервером или недорогой машиной.
Оба удара и zsh имеют способ выполнить косвенное расширение, но они используют другой синтаксис.
Достаточно легко выполнить косвенное использование расширения eval
; это работает во всем POSIX и большинстве Оболочек Bourne. Заботьтесь для заключения в кавычки правильно в случае, если значение содержит символы, которые имеют особое значение в оболочке.
eval "value=\"\${$VAR}\""
echo "$VAR"
echo "$value"
${${VAR}}
не работает, потому что это не опция, которую реализует любая оболочка. Вещь в фигурных скобках должна соответствовать синтаксическим правилам, которые не включают ${VAR}
. (В zsh это - поддерживаемый синтаксис, но делает что-то другое: вложенные замены выполняют последовательные преобразования на том же значении; ${${VAR}}
эквивалентно $VAR
так как это выполняет преобразование идентификационных данных дважды на значении.)
Вы не используете оценку правильно. В Вашем значении в качестве примера $VAR, которому предшествуют с "$" (т.е. '$VALUE'), был бы выполнен как команда. Это не то, что Вы хотите. Вы хотите оценить расширение переменной, имя которой взято от другой переменной.
$ for i in `echo PATH MAIL EDITOR`;
do eval moo="\${$i}"
echo $moo
done
/usr/local/sbin:/usr/local/bin:/usr/sbin:/u (...)
/var/mail/root
nano
When you have a situation where you have two subnets that are the same addressing that wish to communicate, it's a useful hack because it allows you to de-couple them into separate address space. ASCII Art 3: Attempt 2 Network 1 192.168.150.0 (Corp) | Network 2 | 192.168.180.0 (Intermediate) | NAT BOX 1 | eth0 192.168.180.180 eth1 10.15.15.1 | NAT BOX 2 | eth0 10.15.15.2 eth1 192.168.150.252 | Newtwork 3 | 192.168.150.0 (Untrusted Network)
из man-страницы [116984]zshexpn[116985]; раздел - [116986]Флаги расширения параметров[116987]:
PЭто заставляет значение имени параметра интерпретироваться как следующее
имя параметра, значение которого будет использоваться там, где это необходимо. Обратите внимание, что
флаги, установленные одним из семейства типовых наборов команд (в конкретном случае
трансформирования) не применяются к значению имени, используемому в этом способе.
Если используется с вложенным параметром или подстановкой команды, результат этого
будет воспринято как имя параметра таким же образом. Например, если
у вас есть `foo=bar' и `bar=baz', строки ${(P)foo}, ${(P)${foo}}, и
${(P)$(echo bar)} будет расширен до `baz''.
Одно время я читал, почему [116992]${${${VAR}}}[116993] не выдает ожидаемого результата, но в данный момент я не могу его найти. Вы можете сделать что-то вроде следующего:
{ba,z}sh
решение Вот функция, которая работает как в {ba,z}sh. Я считаю, что он также совместим с POSIX.
Предупреждает при подаче:
# Expand the variable named by $1 into its value. Works in both {ba,z}sh
# eg: a=HOME $(var_expand $a) == /home/me
var_expand() {
if [ "$#" -ne 1 ] || [ -z "${1-}" ]; then
printf 'var_expand: expected one non-empty argument\n' >&2;
return 1;
fi
eval printf '%s' "\"\${$1?}\""
}