Доброго времени суток. Помогите разобраться.
$ 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 - это ошибка для шела?
Заранее спасибо за ответ.
eval $1=$2
Модераторы: /dev/random, Модераторы разделов
-
- Администратор
- Сообщения: 13939
- Статус: oel ngati kameie
- ОС: GNU
Re: eval $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
при сбоях форума см.блог
при сбоях форума см.блог