相关疑难解决方法(0)

支持用于定义局部变量的 `local` 关键字的 shell 列表

我知道 Bash 和 Zsh 支持local变量,但有些系统只有 POSIX 兼容的 shell。并且local在 POSIX shell 中未定义。

所以我想问一下哪些shell支持local关键字定义局部变量?

编辑:关于外壳我的意思是默认/bin/sh外壳。

shell shell-script

11
推荐指数
2
解决办法
3367
查看次数

有没有办法使本地命令可移植地工作以破折号 ksh bash 和 zsh?

在 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 中工作,但 …

bash ksh zsh dash shell-script

5
推荐指数
1
解决办法
456
查看次数

`declare name` 和 `declare -g` 有什么作用?

  1. 有什么作用

    declare name
    
    Run Code Online (Sandbox Code Playgroud)

    不提供任何选项吗?它是否声明了字符串变量的名称?

  2. 有什么作用

    declare -g
    
    Run Code Online (Sandbox Code Playgroud)

    不提供变量名怎么办?它是否显示具有全局属性的所有变量的值?

declare在 Bash 手册的描述中没有找到答案。

谢谢。

bash

4
推荐指数
2
解决办法
5330
查看次数

标签 统计

bash ×2

shell-script ×2

dash ×1

ksh ×1

shell ×1

zsh ×1