Answers:
来自help -m declare
:
名称
declare
-设置变量值和属性。概要
declare
[-aAfFgilnrtux
] [-p
] [name
[ ] ...]=value
描述
设置变量值和属性。
声明变量并为其赋予属性。如果未提供名称,则显示所有变量的属性和值。
选项:
-f
将动作或显示限制为函数名称和定义
-F
将显示限制为仅函数名称(调试时加上行号和源文件)
-g
在shell函数中使用时创建全局变量;否则忽略
-p
显示每个NAME的属性和值
设置属性的选项:
-a
使NAMEs索引数组(如果支持)
-A
制作NAME关联数组(如果支持)
-i
使NAME具有“整数”属性
-l
将NAME转换为小写
-n
使NAME引用以其值命名的变量
-r
使NAME成为只读
-t
使NAME具有“ trace”属性
-u
在分配时将NAME转换为大写
-x
使名称导出
使用“
+
”代替“-
”会关闭给定的属性。
let
当为变量赋值时,具有integer属性的变量将执行算术评估(请参阅命令)。在函数中使用时
declare
,与local
命令一样,将NAMEs设为本地。'-g
'选项禁止这种行为。退出状态:
返回成功,除非提供了无效的选项或发生了变量分配错误。也可以看看
重击(1)
实施方式
GNU bash,版本4.3.11(1)-发行版(i686-pc-linux-gnu)
版权所有(C)2013 Free Software Foundation,Inc.
许可证GPLv3 +:GNU GPL版本3或更高版本<http://gnu.org/ licenses / gpl.html>
因此,declare
用于设置变量值和属性。
让我通过一个非常简单的示例演示两个属性的用法:
$ # First Example:
$ declare -r abc=ok
$ echo $abc
ok
$ abc=not-ok
bash: abc: readonly variable
$ # Second Example:
$ declare -i x=10
$ echo $x
10
$ x=ok
$ echo $x
0
$ x=15
$ echo $x
15
$ x=15+5
$ echo $x
20
从上面的示例中,我认为您应该了解declare
变量而不是普通变量的用法!这种类型的declare
指令在函数,脚本循环中很有用。
另请访问键入变量:声明或排版
abc=ok
给变量赋一个值abc
。declare abc
声明一个名为的变量abc
。两者可以组合为declare abc=ok
。
在bash中,像其他shell一样,不需要声明字符串和数组变量,因此declare
除非您想传递选项(例如declare -A abc
,使abc
关联数组或declare -r
使变量为只读),否则不需要声明。但是,在函数内部declare
确实有所不同:它使变量在函数本地,这意味着保留函数外部的变量值(如果有)。(除非使用declare -g
,否则会使变量不是局部的;与其他选项结合使用时,例如declare -gA
在函数中创建全局关联数组时,这很有用。)示例:
f () {
declare a
a='a in f'
b='b in f'
echo "From f: a is $a"
echo "From f: b is $b"
}
a='Initial a'
b='Initial b'
f
echo "After f: a is $a"
echo "After f: b is $b"
输出:
From f: a is a in f
From f: b is b in f
After f: a is Initial a
After f: b is b in f
declare
内置函数可以做的另一件事是
该declare
内置是独一无二的庆典。它受到了强烈的启发,非常接近ksh的typeset
内置函数,bash typeset
作为declare
兼容性的同义词提供。(我不知道为什么bash不只是称呼它typeset
)。还有第三个同义词local
。为了兼容性(与每个Bourne风格的shell export
相同)declare -x
,还有,与相同。
export
,local
并declare
与其他炮弹最兼容?
export
存在于的所有变体中sh
。local
仅存在于bash和zsh中,declare
仅存在于bash中。typeset
存在于ksh,bash和zsh中。
declare
,与local
命令一样,将NAMEs设为本地。该-g
选项禁止这种行为。请参阅help declare
。