全球范围和环境之间有什么区别?

罗兰

全球范围与环境相同吗?

内置声明有一个-g选项:

-g选项强制在全局范围内创建或修改变量,即使在shell函数中执行了声明时也是如此。在所有其他情况下,它将被忽略。

切普纳

TL; DR全局作用域是在启动时从环境初始化的,但与环境不同。


环境是一组<name>=<value>由父进程提供的形式的字符串启动时,外壳程序将使用其<name>部分为有效外壳程序标识符的每个字符串,并使用该名称在全局范围内创建一个变量。

例如,环境字符串FOO=3将成为名为FOOvalue的shell变量3

另一方面,10=6shell会忽略环境字符串,因为10它不是有效的shell标识符。但是,该字符串保留在环境中,然后传递给任何可能期望使用此字符串的子进程。[更新:POSIX规范不要求忽略此类字符串;合格的外壳可以保留或丢弃它们。]

还有一些局部变量,它们是由诸如localdeclare函数定义之类的命令创建的例如:

$ foo () { declare x; x=3; echo "$x"; }
$ x=2
$ foo
3
$ echo "$x"
2

x=2在全局范围内创建(或更改其值)变量。在函数内部,declare x创建了一个局部变量。对该变量所做的更改不会影响具有相同名称的全局变量。

使用该-g选项declare可以使x函数内部的名称引用全局范围,而不是创建局部变量。

$ foo () { declare -g x; x=3; echo "$x"; }
$ x=2
$ foo
3
$ echo "$x"
3

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

“ .equals”和“ ==”之间有什么区别?

范围和块之间有什么区别?

具有范围“导入”和不具有“导入”的“ pom”类型依赖性之间有什么区别?

什么是OLTP和OLAP。它们之间有什么区别?

什么是Leaflet和Mapbox,它们之间有什么区别?

Git diff提交范围中双点“ ..”和三点“ ...”之间有什么区别?

Git提交范围中双点“ ..”和三点“ ...”之间有什么区别?

phpunit覆盖范围:“ addUncoveredFilesFromWhitelist”和“ processUncoveredFilesFromWhitelist”选项之间有什么区别?

什么是Haskellng?“ haskellPackages”和“ haskellngPackages”之间有什么区别?

$(“”)和$ .find(“”)之间有什么区别?

执行上下文和词法环境之间有什么区别和关系?

not null和<>''之间有什么区别

在IdentityServer中,“客户端密钥”和“范围密钥”之间有什么区别?

C中的翻译环境和执行环境是什么,它们之间有什么区别?

conda“基本”环境和“根”环境之间有什么区别?

Toad for Oracle 12.12:文字变量和环境变量之间有什么区别?

“ Ord a => [a]-> [a]-> [a]”和“ [a]-> [a]-> [a]”之间有什么区别

[],&[]和vec![]之间有什么区别?

不同的Modelica仿真环境之间有什么区别?

之间有什么区别。和.data?

ThisBuild和Global范围之间有什么区别?

Excel 2007中的表和命名范围之间有什么区别?

〜和/在路径之间有什么区别

线程和之间有什么区别

图形环境,用户界面,图形外壳和窗口系统之间有什么区别?

关于chroot环境,“ mount -t ...”和“ mount -o bind ...”之间有什么区别?

([])+ 和 []+ 之间有什么区别?

chrome环境和节点环境之间的“排序”方法有什么区别

这些查询 MySQL 日期范围之间有什么区别