${!FOO}
виконує подвійну підстановку у bash
, тобто означає, що вона приймає (рядкове) значення FOO і використовує його як ім'я змінної.
zsh
не підтримує цю функцію.
Чи є спосіб , щоб зробити цю роботу в тому ж самому bash
і zsh
?
Фон:
У мене є список змінних середовища, наприклад
PATH MAIL EDITOR
і потрібно спочатку надрукувати імена змінних, а потім їх значення.
Це працює, bash
але не zsh
:
for VAR in LIST
do
echo $VAR
echo ${!VAR}
done
Це має бути якось можливо "по-старому" eval
, але я не можу змусити його працювати:
for VAR in LIST
do
echo $VAR
echo `eval \$$VAR`
done
Я ніколи не буду розуміти, чому я не можу просто робити довільні глибокі заміни на кшталт ${${VAR}}
або навіть у ${${${VAR}}}
разі потреби, тому пояснення цього було б непоганим.
bash
, він справді має ту саму функцію (і набагато більше), використовує лише інший малюнок, а саме ${(p)FOO}
.
(e)
прапор розширення параметра zsh був доданий у zsh-2.6-beta17 (травень 1996 р.), (P)
Прапор 3.1.5-pws-7 (1999 р.). bash's ${!var}
2.0 (грудень 1996).