3.相关命令 - wolai 笔记

1.declare 命令

declare命令可以声明一些特殊类型的变量,为变量设置一些限制,比如声明只读类型的变量和整数类型的变量。
它的语法形式如下。
declare OPTION VARIABLE=value
declare命令的主要参数(OPTION)如下。
  • -a:声明数组变量。
  • -f:输出所有函数定义。
  • -F:输出所有函数名。
  • -i:声明整数变量。
  • -l:声明变量为小写字母。
  • -p:查看变量信息。
  • -r:声明只读变量。
  • -u:声明变量为大写字母。
  • -x:该变量输出为环境变量。
declare命令如果用在函数中,声明的变量只在函数内部有效,等同于local命令。
不带任何参数时,declare命令输出当前环境的所有变量,包括函数在内,等同于不带有任何参数的set命令。
$ declare

1.1 -i参数

-i参数声明整数变量以后,可以直接进行数学运算。
$ declare -i val1=12 val2=5
$ declare -i result
$ result=val1*val2
$ echo $result
60
上面例子中,如果变量result不声明为整数,val1*val2会被当作字面量,不会进行整数运算。另外,val1val2其实不需要声明为整数,因为只要result声明为整数,它的赋值就会自动解释为整数运算。
注意,一个变量声明为整数以后,依然可以被改写为字符串。
$ declare -i var=12
$ var=foo
$ echo $var
0
上面例子中,变量var声明为整数,覆盖以后,Bash 不会报错,但会赋以不确定的值,上面的例子中可能输出0,也可能输出的是3。

1.2 -x参数

-x参数等同于export命令,可以输出一个变量为子 Shell 的环境变量。
$ declare -x foo
# 等同于
$ export foo

1.3 -r参数

-r参数可以声明只读变量,无法改变变量值,也不能unset变量。
$ declare -r bar=1

$ bar=2
bash: bar:只读变量
$ echo $?
1

$ unset bar
bash: bar:只读变量
$ echo $?
1
上面例子中,后两个赋值语句都会报错,命令执行失败。

1.4 -u参数

-u参数声明变量为大写字母,可以自动把变量值转成大写字母。
$ declare -u foo
$ foo=upper
$ echo $foo
UPPER

1.5 -l参数

-l参数声明变量为小写字母,可以自动把变量值转成小写字母。
$ declare -l bar
$ bar=LOWER
$ echo $bar
lower

1.6 -p参数

-p参数输出变量信息。
$ foo=hello
$ declare -p foo
declare -- foo="hello"
$ declare -p bar
bar:未找到
上面例子中,declare -p可以输出已定义变量的值,对于未定义的变量,会提示找不到。
如果不提供变量名,declare -p输出所有变量的信息。
$ declare -p

1.7 -f参数

-f参数输出当前环境的所有函数,包括它的定义。
$ declare -f

1.8 -F参数

-F参数输出当前环境的所有函数名,不包含函数定义。
$ declare -F

2.readonly 命令

readonly命令等同于declare -r,用来声明只读变量,不能改变变量值,也不能unset变量。
$ readonly foo=1
$ foo=2
bash: foo:只读变量
$ echo $?
1
上面例子中,更改只读变量foo会报错,命令执行失败。
readonly命令有三个参数。
  • -f:声明的变量为函数名。
  • -p:打印出所有的只读变量。
  • -a:声明的变量为数组。

3.let 命令

let命令声明变量时,可以直接执行算术表达式。
$ let foo=1+2
$ echo $foo
3
上面例子中,let命令可以直接计算1 + 2
let命令的参数表达式如果包含空格,就需要使用引号。
$ let "foo = 1 + 2"
let可以同时对多个变量赋值,赋值表达式之间使用空格分隔。
$ let "v1 = 1" "v2 = v1++"
$ echo $v1,$v2
2,1
上面例子中,let声明了两个变量v1v2,其中v2等于v1++,表示先返回v1的值,然后v1自增。

Comment