linux bash变量作用域
2019-12-19 05:47:41来源:博客园 阅读 ()
linux bash变量作用域
linux bash变量作用域
一,思考一个问题,当在shell里执行某个程序时,shell是怎么找到这个程序的?
shell会去$PATH环境变量定义的目录里去找这个命令。环境变量里一般包括/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
这么多目录,这些目录下又有上千个程序,从这么多目录里的,这么多程序里查找肯定是花费时间的。shell为了提高查找效率,使用了缓存机制,这个机制叫hash
。。
有了hash缓存后,shell先去hash里查找,如果找到了,就使用;如果没有找到,才去$PATH环境变量定义的目录里去找,找到后,把命令的路劲加程序名放入hash中。
注意:如果是shell的buildin命令,不会放入hash。
hash命令用法:
查看hash里都缓存了哪些程序:
hash
hits:代表此命令,被命中了几次。
# hash hits command 1 /usr/bin/cat 2 /usr/bin/ls
详细查看hash里都缓存了哪些程序:
hash -l
# hash -l builtin hash -p /usr/bin/cat cat builtin hash -p /usr/bin/ls ls
清除某个缓存:
hash -d cat
# hash -d cat # hash hits command 2 /usr/bin/ls
清除所有缓存:
hash -r
# hash -r # hash hash: hash table empty
为什么还要清除缓存?理由:当把命令移动到别的目录后,用原来的缓存就找不到命令了,shell会报出错误,所有要清除。
二,bash变量的作用域
shell进程的子孙进程。
在shell进程里又启动了别的shell进程,下面的例子是在bash里又启动了一个bash,让后在新启动的bash里,又启动了一个csh。
# pstree systemd─┬ ├─sshd───sshd───bash───pstree # bash # csh # pstree systemd─┬ ├sshd───sshd───bash───bash───csh───pstree
bash变量种类:
按变量的作用域范围分为:
本地变量:作用域仅为当前shell进程
验证本地变量的作用域:
# firstName=jerry # echo $firstName jerry # csh # echo $firstName firstName: Undefined variable. # exit exit # echo $firstName jerry
赋值:name=value
引用:${name},$name
- "":变量会被替换成其值
- '':变量不会被替换成其值
查看变量:set
撤销变量:unset name。注意name前不要加$
# firstname=tom # echo $firstname tom # unset firstname # echo $firstname
环境变量:作用域为当前shell进程,及其子孙shell进程。
验证环境变量的作用域:
# fn=tom # echo $fn tom # export fn # csh # echo $fn tom # exit exit # echo $fn tom
赋值:
export name=value
name=value
export name
declare -x name=value
name=value
declare -x name
引用:同本地变量。
撤销变量:unset name。注意name前不要加$
bash内嵌的环境变量:
PATH
,HISTORY
,HISTSIZE
,HISTFILESIZE
,HISTCONTROL
,SHELL
,HOME
,UID
,PWD
,OLDPWD
查看环境变量命令:
export
,declare -x
,printenv
,env
只读变量(常量):作用域是当前shell进程,且不可以撤销。随当前shell进程的终止而终止。
- declare -r name
- readonly name
检证常量的作用域:
# la=foo # declare -r la # echo $la foo # csh # $echo la echo: Undefined variable. # exit exit # echo $la foo # la=aa -bash: la: readonly variable [root@localhost ~]# unset la -bash: unset: la: cannot unset: readonly variable
- 局部变量:函数里的变量,作用域仅为函数内。
位置参数变量:shell脚本的参数
特殊变量:
- $?:上一个命令的执行结果。0:成功;1-255:失败。
- ...
bash里,多个命令一起执行
多个命令连续执行:
command1;command2;command3...
这些命令都会被执行。
多个命令逻辑连续执行
根据前面命令的执行结果(成功或者失败),决定是否执行后面的命令。
前一个命令执行成功后,后面的命令才让执行:
&&
例子:先查看目录存不存在,存在了才进入此目录
# pwd /root # ls /sdf && cd /tmp ls: cannot access /sdf: No such file or directory # pwd /root # ls /sdf || cd /tmp ls: cannot access /sdf: No such file or directory # pwd /tmp
前一个命令执行失败后,后面的命令才让执行:
||
例子:先某个用户存不存在,不存在则创建此用户;存在了就不创建了。
# pwd /root # ls /sdf || cd /tmp ls: cannot access /sdf: No such file or directory # pwd /tmp
c/c++ 学习互助QQ群:877684253
本人微信:xiaoshitou5854
原文链接:https://www.cnblogs.com/xiaoshiwang/p/12066585.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Linux系统如何设置开机自动运行脚本? 2020-06-11
- Linux指令和shell脚本 2020-06-11
- 适合开发者的最佳Linux发行版 2020-06-11
- RAID 1 软件实现(Linux 系统) 2020-06-10
- linux各级目录 2020-06-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash