${!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).