Рубрики
bash

bash Присвоение / отображение переменной / глобальные / локальные переменные

Присвоение и отображение переменной:

Присвоение делается с помощью оператора присваивания =. 
var=abc

Чтобы отобразить содержимое оболочковой переменной, нужно воспользоваться командой echo, 
при этом перед именем переменной необходимо поставить символ $:
echo $var 
abc

При присваивании переменных нельзя оставлять между оператором присваивания = и именем переменной пробелов. 
Запись var = abc синтаксически неверная и работать не будет!
Если в содержимом оболочковой переменной должны содержаться пробелы или другие специальные символы, 
то при присваивании всю последовательность символов необходимо заключить в одиночные кавычки:
var='abc efg"

При присваивании можно записывать друг за другом сразу по несколько последовательностей символов. 
В следующем примере переменной а присваивается новая последовательность символов, состоящая из содержимого этой переменной, 
последовательности символов ххх и еще раз из исходного содержимого:
a=3
a=$a'xxx'$a 
echo $a ЗхххЗ

В следующем примере имеющаяся переменная PATH (со списком всех каталогов, в которых может осуществляться поиск исполняемых программ) 
дополняется в домашнем каталоге каталогом bin. 
Теперь вы можете выполнять любые команды, находящиеся в этом каталоге (не указывая путь полностью).
echo SPATH
/usr/1 ocal/sbin:/usr/1ocal/bi n:/usr/sbi n:/usr/bi n:/sbin:/bin
PATH=$PATH':/home/kofler/bin
echo $PATH
/usr/1ocal/sbin:/usr/1ocal/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/kofler/bin
Вычисления с переменными можно производить в квадратных скобках описанным выше способом:
a=3 
а=$[$а*4] 
echo $a 12


Если результат выполнения команды следует сохранить в переменной, нужно произвести описанную выше подстановку команды по образцу $(команда). 
В следующем примере текущий каталог сохраняется в а:
a=$(pwd)
echo $a /home/kofler

!!! Содержимое переменных сохраняется только в оболочке:

Содержимое переменных сохраняется только в оболочке.
При выходе из оболочки эта информация теряется. 
Если определенные переменные требуются вам снова и снова, то присваивание следует производить в файле /etc/profile или .profile домашнего каталога.
Оба этих файла (если они имеются) автоматически выполняются при запуске bash.
Если вы хотите сохранить содержимое одной из переменных в файле, то нужно выполнить команду echo с переадресацией ввода:
echo $var > file

Глобальные и локальные переменные:

Обратите внимание, что все переменные, полученные в результате обычного присваивания, могут быть только локальными! 
Чтобы задать глобальную переменную, следует выполнить export или declare -x.
Для управления переменными в оболочке существуют многочисленные команды, которые функционально иногда дублируют друг друга. 
Например, для объявления глобальной переменной можно использовать как export, так и declare -x. 
Следующие примеры приводятся для того, чтобы немного прояснить ситуацию с дублирующимися командами:
       
а=3 - Краткий способ записи let, переменная а является локальной
declare a=3 - Присваивает локальной переменной а значение (как let)
declare -x а=3 - Присваивает локальной переменной а значение (как export)
export - Отображает все глобальные переменные
export a - Делает переменную а глобальной
export a=3 - Присваивает глобальной переменной а значение
let a=3 - Присваивает глобальной переменной а значение
local a=3 - Определяет переменную а как локальную (лишь в функциях оболочки)
printenv  - Как и export, отображает все глобальные переменные
set - Отображает все переменные (и локальные, и глобальные)
unset a - Удаляет переменную а

Переменные, задаваемые оболочкой:

Программы оболочки могут обращаться и к некоторым переменным, заранее заданным bash. 
Эти переменные нельзя изменять в ходе присваивания, их можно только считывать. 
Имя переменной состоит из различных специальных символов.
Переменные даются уже с предшествующим символом $.
$? - Возвращаемое значение последней команды
$! - Номер PID последнего запущенного фонового процесса
$$ - PID текущей оболочки
$0 - Имя файла, содержащего только что выполненный файл оболочки (или имя символьной ссылки, указывающей на файл)
$# - Количество параметров, переданных программе оболочки
От $1 до $9 - Параметр от 1 до 9
$* или $@ - Совокупность всех переданных параметров