[bash] как сделать локальную переменную глобальной?

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

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

Boochmaster
Сообщения: 3

[bash] как сделать локальную переменную глобальной?

Сообщение Boochmaster »

Пишу свой первый bash скрипт. Есть вопрос по переменным за пределами функции.

Код: Выделить всё

#!/bin/bash
MENU()
 (clear
  echo SELECT MAP:
  echo
  echo "1) Odessa"
  echo "2) Simferopol"
  echo "3) Alushta"
  echo
  echo "Enter map number"
  echo "Enter 'E' for Exit"
  read n
   case $n in
    1) sel_map="Odessa";;
    2) sel_map="Simferopol";;
    3) sel_map="Alushta";;
    E|e) clear; echo "Exit from script"; sleep 1; exit;;
    *) clear; echo "Incorrect map number; sleep 2; MENU;;
   esac
# проверка переменной sel_map внутри функции MENU
  echo "sel_map = $sel_map"
  )
  MENU
# проверка переменной sel_map за пределами функции MENU
[b]echo "sel_map = $sel_map"[/b]

.......


Почему то внутри функции переменная sel_map корректно выводиться на экран, а во втором случае на экран выводиться пустое значение. На сколько я знаю так должна себя вести локальная переменная, если перед ней поставить local (в моем случае например local sel_map="..."), но у меня local не стоит.

Что я не так делаю? Как эту переменную сделать глобальной?

P.S. Извините если вопрос глупый, это мой первый опыт написания скрипта под линукс, заранее спасибо.
Спасибо сказали:
pcodr
Сообщения: 283
ОС: Debian

Re: [bash] как сделать локальную переменную глобальной?

Сообщение pcodr »

Потому что это у вас не функция.
Как задается функция:

Код: Выделить всё

sub()
{
...
}


Как вы сделали:

Код: Выделить всё

sub()
(
...
)


Почувствуйте разницу
remote system type is unix
Спасибо сказали:
Boochmaster
Сообщения: 3

Re: [bash] как сделать локальную переменную глобальной?

Сообщение Boochmaster »

как все просто оказывается. теперь работает, спасибо! :)

кстати, а с круглыми скобками у меня это что если не функция была?
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: [bash] как сделать локальную переменную глобальной?

Сообщение drBatty »

Boochmaster писал(а):
05.07.2009 12:23
кстати, а с круглыми скобками у меня это что если не функция была?

с круглыми - это шелл в шелле

Код: Выделить всё

#!/bin/bash

x="fff"
(
    echo "x='$x'"
    x="ttt"
    echo "x='$x'"
)
echo "x='$x'"

exit 0


Shell

$ ./subsh x='fff' x='ttt' x='fff'

как видите, внутри скобок своя переменная, хотя её значение и экспортируется снаружи. однако из скобок она не выходит.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Boochmaster
Сообщения: 3

Re: [bash] как сделать локальную переменную глобальной?

Сообщение Boochmaster »

понятно. спасибо за ответы ;)
Спасибо сказали: