Я запутался, потому что я изменил значение IFS на :
внутри функции (без использования local
), а затем попытался отобразить значение IFS с помощью этой команды после вызова функции:
echo $IFS
, которая отображала пустую строку, из-за которой я чувствовал, что функция не меняет IFS.После публикации вопроса я понял, что разделение слов было в игре, и я должен был использовать
echo "$IFS"
или
printf '%s\n' "$IFS"
или, что еще лучше,
set | grep -w IFS=
для точного отображения значения IFS.
Возвращаясь к основной теме о локальных переменных, да, любая переменная может быть объявлена как local
внутри функции для ограничения области действия, за исключением переменных, которые были объявлены только для чтения.(с помощью встроенных команд readonly
или declare -r
).Это включает в себя Bash внутренние переменные, такие как BASH_VERSINFO
и т. Д.
С help local
:
local: local [option] name [= value] ...
Define local variables.
Create a local variable called NAME, and give it VALUE. OPTION can
be any option accepted by `declare'.
Local variables can only be used within a function; they are visible
only to the function where they are defined and its children.
Exit Status:
Returns success unless an invalid option is supplied, a variable
assignment error occurs, or the shell is not executing a function.