[newbies] Bash and POSIX - local variables

Leonid Krivoshein klark.devel на gmail.com
Пт Ноя 21 00:44:27 MSK 2025


Добрый день!


On 11/20/25 18:28, Alexander Lubyagin wrote:
>
> Вот такой скрипт:
> x=42
> echo $x
> foo() {
>  local x=43
>  echo $x
> }
> foo
> echo $x
>
> Интерпретатор Bash:
> $ /bin/bash4 script
> 42
> 43
> 42
>
> Интерпретатор Bash в режиме POSIX:
> $ /bin/bash4 --posix script
> 42
> 43
> 42
>
> То есть, в POSIX-режиме тоже поддерживаются локальные для функций 
> переменные.
>
> Как же писать скрипт, после shebang в котором указан /bin/sh?
>
> Полагаться ли на поддержку локальных переменных?
>

Зависит от целеполагания. Поддержка local появилась давно. Во многих 
системах /bin/sh является симлинком на что-то, что совершенно не обязано 
быть POSIX-compliant shell. Например, даже в старых альтах это был bash3 
с поддержкой local. Проверяйте ash, используйте subshell ( ... ), если 
так важна переносимость. По-моему, все, кто за неё радел, уже давно 
забили на это дело и пользуются всеми прелестями башизмов. :-) Куда 
важнее для правильного скриптования использовать shellcheck.


-- 
WBR, Leonid Krivoshein.



Подробная информация о списке рассылки devel-newbies