Предположим, что значение FOOявляется допустимым именем переменной (скажем BAR), eval \$$FOOразбивает значение BARна отдельные слова, обрабатывает каждое слово как шаблон подстановочного знака и выполняет первое слово результата как команду, передавая другие слова в качестве аргументов. Обратная косая черта перед долларом делает его трактуемым буквально, поэтому аргумент, передаваемый evalвстроенному, представляет собой строку из четырех символов $BAR.
${${FOO}}это синтаксическая ошибка Он не выполняет «двойную замену», потому что такой функции нет ни в одной из общих оболочек (в любом случае, с этим синтаксисом). В zsh ${${FOO}} он действителен и представляет собой двойную подстановку, но он ведет себя не так, как вам бы хотелось: он выполняет два последовательных преобразования значения FOO, оба из которых являются преобразованием идентификаторов, так что это просто причудливый способ записи ${FOO}.
Если вы хотите трактовать значение переменной как переменную, будьте осторожны с правильным заключением в кавычки. Намного проще, если вы установите результат в переменную:
eval "value=\${$FOO}"
l3=l2; eval eval eval echo \\\$\\$\$$l3→53294так что не совсем модульный.