我知道 Bash 和 Zsh 支持local
变量,但有些系统只有 POSIX 兼容的 shell。并且local
在 POSIX shell 中未定义。
所以我想问一下哪些shell支持local
关键字定义局部变量?
编辑:关于外壳我的意思是默认/bin/sh
外壳。
在 dash(以及 bash zsh 和其他一些 shell)中,该命令local
可以将变量范围限制为该函数(在某些情况下还有后代)。这使得有可能使变量仅限于该函数内部(以及某些情况下的后代函数调用)。
例如:
testlocal(){
local IFS
IFS=123
echo "internal IFS = $IFS"
testdescend
}
testdescend(){
echo "descended IFS = $IFS"
}
IFS=abc
testlocal
echo "external IFS = $IFS"
Run Code Online (Sandbox Code Playgroud)
在 dash(以及 bash 和 zsh)中执行时生成此输出:
$ dash ./script
internal IFS = 123
descended IFS = 123
external IFS = abc
Run Code Online (Sandbox Code Playgroud)
这意味着 IFS对函数(和后代)来说仍然是本地的。
但是, ksh 不同,不接受local
:
$ ksh ./script
./mt2[3]: local: not found [No such file or directory]
Run Code Online (Sandbox Code Playgroud)
将“本地”一词更改为“排版”可使脚本(几乎)在 ksh 中工作,但 …
有什么作用
declare name
Run Code Online (Sandbox Code Playgroud)
不提供任何选项吗?它是否声明了字符串变量的名称?
有什么作用
declare -g
Run Code Online (Sandbox Code Playgroud)
不提供变量名怎么办?它是否显示具有全局属性的所有变量的值?
我declare
在 Bash 手册的描述中没有找到答案。
谢谢。