eval $1=$2

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

newk
Сообщения: 25

eval $1=$2

Сообщение newk »

Доброго времени суток. Помогите разобраться.

$ cat .bash_profile
...
# setenv - keep tcsh users happy
function setenv()
{
if [ $# -eq 2 ]
then
eval $1=$2
export $1
else
echo "Usage: setenv NAME VALUE" 1>&2
fi
}
$ . ~/.bash_profile
$ setenv TCL_LIBRARY /usr/local/lib/tcl
$ env | grep TCL_LIBRARY
TCL_LIBRARY=/usr/local/lib/tcl

Далее объясняется, что так как $1=$2 начинается с $, то оболочка трактует всю строку как один тоукен-команду. После выполнения замены переменных командой становится TCL_LIBRARY=/usr/local/lib/tcl, ЧТО ЕСТЬ ОШИБКА. Используя же eval, второе сканирование (обработку) строки делит строку на три нужных тоукена и получается корректное назначение комманды.
Почему просто $1=$2 - это ошибка для шела?

Заранее спасибо за ответ.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: eval $1=$2

Сообщение sash-kan »

newk писал(а):
03.08.2009 16:12
Почему просто $1=$2 - это ошибка для шела?
это не ошибка. это команда. которую shell пытается выполнить. и, скорее всего, неудачно:
$ k=a
$ $k=b
bash: a=b: command not found
$ echo '#!/bin/sh' > ~/bin/a\=b
$ echo 'echo asdf' >> ~/bin/a\=b
$ chmod u+x ~/bin/a\=b
$ $k=b
asdf
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: