哈喽~ 各位运维、服务器小伙伴们,今天遇到个疑惑,一个变量一直没找到在哪定义的,但是一直有默认值, 在这里把自己学习内容记录一下,跟大家也一同学习下, 加深理解~!
一、今天遇到一个问题
最近在学习历史命令相关的变量时,发现服务器上/etc/profile文件中没有配置HISTSIZE变量的默认值,但是我history显示的时候,仍然只有部分历史数据, 这是为什么呢?三、实操命令(复制粘贴就能用,避免输错)
下面就让我们带着问题来学习,每次都事半功倍。
1. HISTSIZE是环境变量吗?
[root@test ~]# grep HISTSIZE /etc/profile[root@test ~]# env|grep $HISTSIZE[root@test ~]# set|grep HISTSIZEHISTZISE=500
- HISTSIZE 默认是 shell 内置局部变量,
export 后才是环境变量; - 不配置 /etc/profile完全没问题,bash 自带兜底默认值500 ,变量一定存在不会消失
- shell内置变量使用 set|grep 变量名 查看默认值
2.发现HISTSIZE是shell内置变量,不配置也有默认值。那linux还有哪些内置变量呢?
HISTSIZE:内存最大缓存命令条数HISTFILE:历史文件路径~/.bash_historyHISTFILESIZE:历史文件最大行数HISTCONTROL:历史去重 / 忽略空格规则HISTIGNORE:过滤不保存的命令
PS1:主命令提示符(登录后前面那串)PS2:多行换行续行提示符(>)PS3:select 循环菜单提示符PS4:脚本调试 set -x 输出前缀
3. Linux的内置变量和环境变量有什么区别呢?
- 内置变量:仅当前终端会话有效,子 Shell、脚本无法继承,
env 看不到,只有 set 能看到。 - 环境变量:父子进程全部共享继承,
env / printenv 可查看。
五、总结&避坑提醒(重点划重点)
| 1. 变量无在.bash_profile或.bashrc等文件无配置, 并且输出有值时,需确认是否是内置变量。2. 环境变量用env查看, 内置变量用set查看即可。3. 内置变量仅在当前终端有效,子shell无效; 环境变量父子进程全部共享继承。 |
你有没有遇到过没有export仍有默认值的变量吗?评论区留言说说你的踩坑经历~喜欢记得点赞+在看,收藏起来慢慢看,后续持续更新技术/职场干货~