多命令执行(2)

[root@c7-server ~]# readonly age=28 [root@c7-server ~]# age=30 -bash: age: readonly variable [root@c7-server ~]# unset age -bash: unset: age: cannot unset: readonly variable

-p:单独使用,显示出所有的只读变量和函数。

[root@c7-server ~]# readonly -p declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath" declare -ir BASHPID declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d" declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-RedHat-linux-gnu")' declare -ir EUID="0" declare -ir PPID="3530" declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" declare -ir UID="0" declare -r age="28"

注意:declare -r就表示定义一个只读变量,这也是个shell内置命令,后面会提到。

我们刚说了,本地变量的作用域只在当前的shell中,那么在子shell和其他shell中应该是不存在的,我们来证明一下。

[root@c7-server ~]# pstree -ph 1148 sshd(1148)┬─sshd(1851)───bash(1857) ├─sshd(3530)───bash(3536)───pstree(4859) └─sshd(4125)───bash(4131) [root@c7-server ~]# name=alongdidi [root@c7-server ~]# echo $name alongdidi [root@c7-server ~]# bash [root@c7-server ~]# pstree -ph 1148 sshd(1148)─┬─sshd(1851)───bash(1857) ├─sshd(3530)───bash(3536)───bash(4861)───pstree(4894) └─sshd(4125)───bash(4131) [root@c7-server ~]# echo $name [root@c7-server ~]#

我们原本在PID为3536的shell(bash进程)中,在当前shell设置了变量name并且可获取其值,随后使用bash命令进入了子shell(PID为4861的bash进程)中再获取这个变量,就获取不到了。

如果我们使用exit命令退回刚才的��shell,就又可以获取到该值。

[root@c7-server ~]# exit exit [root@c7-server ~]# echo $name alongdidi

我们切换使用Xshell再创建了一个新的session,在那个session下尝试获取该变量的值,也是没有的。证明成功。

[root@c7-server ~]# pstree -ph 1148 sshd(1148)─┬─sshd(1851)───bash(1857) ├─sshd(3530)───bash(3536) └─sshd(4125)───bash(4131)───pstree(4860) [root@c7-server ~]# echo $name [root@c7-server ~]#

本地变量的生命周期,从创建的时候开始,直到所在的bash进程结束(比如使用exit)或者变量被unset。

环境变量

环境变量的作用域是当前shell及其子shell。因此也可以理解为将变量输出(export)到了子shell中。无论子shell的层数有几层,只要变量具备环境变量的属性,那么它就都会有值。

可以通过export或者declare将变量设置为环境变量。

[root@c7-server ~]# export name [root@c7-server ~]# bash [root@c7-server ~]# echo $name alongdidi [root@c7-server ~]# bash [root@c7-server ~]# echo $name alongdidi [root@c7-server ~]# bash [root@c7-server ~]# echo $name alongdidi

export的语法如下。

export [-fn] [name[=value] ...] export -p

-f:声明name是一个函数。

-n:去除环境变量的属性。

-p:使用该选项或者仅使用export命令的话,可以查看当前所有的环境变量。declare -x有同效。外部命令env和printenv也可以实现。

export是专门用于设置与环境变量属性相关的命令。declare是设置所有与变量相关的属性(只读、环境变量、整型、索引数组、关联数组)等等。

多命令执行

;:分号,命令按顺序执行,执行完第一个再执行第二个,后一个命令的执行与否与前一个命令的执行成功与否无关。

~]# COMMAND1; COMMAND2

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a8451c88063f93553abe84832d95e44a.html