LINUX.ORG.RU

если результат они дают одинаковый.

Здесь неверное допущение. Результат не одинаковый.

anonymous
()

Короче:

ololo="123"
eval ololo_${ololo}="456"
echo ${ololo_123}

Нет шелла под рукой, но вроде так.

IPR ★★★★★
()
Ответ на: комментарий от IPR

В вашем примере — потому, что в Баше уже давно есть массивы, в том числе ассоциативные.

А в случаях, когда использование eval для присвоения было более оправданным (при передаче целевой переменной процедуре, например), — потому, что не так давно в Баше появились и ссылки (references).

Zmicier ★★★★★
()

Они совершенно не дают одинаковый результат. Одно выводит результат команды, другое парсит строку из аргументов как скрипт(грубо говоря).

nexfwall ★★★★
()
Ответ на: комментарий от IPR

Я хоть слово о баше написал?

Нет, но вы написали три строчки на Баше. На Баше — поскольку мы обсуждаем Баш.

У меня posix shell.

Это как? Он же воображаемый.

Zmicier ★★★★★
()
Ответ на: комментарий от IPR

Он вполне реальный: /bin/sh

У вас там именно что какой-то реальный интерпретатор. А ПОЗИКС — это пачка бумажных спецификаций разных лет.

Zmicier ★★★★★
()
Ответ на: комментарий от Zmicier

Posix - стандарт. А во FreeBSD /bin/sh - реальный интерпретатор.

IPR ★★★★★
()

`` (а также $()) — «захватывает» stdout команды и выполняется с (дочернем) сабшелле (т.е. например в такой конструкции не выйдет выставлять переменные для текущего интерпретатора).

eval же не «захватывает» stdout, а всего лишь выходит с таким же статусом, что и команда, переданная ему. Также eval запускается в текущем контексте интерпретатора и, как следствие может выставлять переменные для текущего шелла.

KennyMinigun ★★★★★
()
Ответ на: комментарий от IPR

Да, бздуны крайне прохладно относятся к башу, это мы знаем. У вас что, и правда так сложно его поставить?

KennyMinigun ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.