网站首页 > 基础教程 正文
Bash变量的分类
本地变量
作用范围仅对当前的bash进程有效,对其父子进程都不生效。在本地变量中,还有一种叫作局部变量,仅在运行的shell脚本或函数中有效。
环境变量
作用范围是当前shell及其子shell。可以使用 export或declare -x来声明一个环境变量。
位置变量
当传递给脚本、函数有参数时,在脚本、函数内部就可以使用位置变量来引用。比如:$1, $2, $3 .... $9, ${10}。当参数的个数大于9时,需要使用{}将数字括起来。
特殊变量
bash内部预定义的一些特殊的变量。
- $? 程序或命令的返回值,0表示成功,否则为失败;范围是0到255,其中0~127是系统使用,自己写的程序可以使用128~255
- $0 表示当前运行的进程的名称
- $ 表示当前进程的PID
- $# 表示位置参数的个数
- $@ 表示脚本或函数的所有参数,以"$1", "$2", ... "${n}"的形式展示。也就是把每个位置参数看成是单个的整体。
- $* 表示脚本或函数的所有参数,以"$1,$2,$3...$n"的形式展示,也就是把所有的参数看成一个整体。
- !$ 表示上一个命令的最后一个参数。这个在日常工作中用得比较多。比如:cd !$
变量的操作
- 定义变量
变量就是一段命名的内存空间,变量名称只能包含字母、数字、和下划线。由于BASH自带的环境变量都是大写的字母,所在自定义变量时可以采用首字母大写来避免覆盖掉系统的环境变量。
a=3 声明并赋值一个局部变量a,注意:"="两边没有空格;
export a b=4 将变量a导出为环境变量,同时又声明了一个环境变量b,它的值为4
declare -i m 声明一个int类型的变量m
declare -a n 声明一个数组类型的变量n
declare -r c 声明一个只读变量c,不可以重新赋值,也不可以unset。
declare -x D 声明一个环境变量D
- 引用变量
使用 $var 或 ${var} 来引用变量,那么什么时间要加{}呢?就是在无法确定变量名的范围时需要加,比如:在abcde中abc这个位置需要使用一个变量来替换,那么在引用变量的时候就必须加上{},即:${var}de
在引用变量时还需要注意,单引号(')、双引号(“)、反引号(`)的区别。
单引号:表示强引用,在单引号内部是不能使用$来引用bash变量的。
双引号:表示弱引用,在双引号内可以使用$来引用bash变量。
反引号:表示命令替换,就是把反引号内部命令的执行结果替换在当前位置,相当于$(command)
- 取消变量
想要取消一个变量,可以使用unset var,注意在取消变量的时候是不需要加$符的
猜你喜欢
- 2024-10-12 这个为生信学习打造的开源Bash教程真香!!(目录更新)
- 2024-10-12 Shell 函数(杰哥教你Linux) shell中函数
- 2024-10-12 Linux下程序是怎样执行的 linux怎么执行程序
- 2024-10-12 这几个常用 alias,带你高效做事(下)
- 2024-10-12 Shell脚本:函数语法以及实例讲解 shell脚本入门详解
- 2024-10-12 Linux 之 bash 编程 linux bash-4.1
- 2024-10-12 Bash函数:ucase、lcase:借助perl一键转换字符串为大小或小写
- 2024-10-12 Bash Shell制作菜单3部曲:1简单交互菜单|Linux|运维|嵌入式
- 2024-10-12 Bash脚本中的用户交互:暂停、等待按键和倒计时的实现方法
- 2024-10-12 bash问题:是否有函数可以返回字符串的长度?
- 最近发表
-
- 自动脚本操作流程(自动脚本怎么做)
- Ubuntu系统存在严重漏洞,几句命令轻松攻破root权限
- redis实现分布式锁(redis实现分布式锁的原理)
- Linux系统移植之—uboot移植,你们要的uboot终于来了,堪称精品
- powershell 后台运行命令(如何在powershell运行程序)
- 生产环境H200部署DeepSeek 671B 满血版实战(三):SGLang 安装详解
- OpenWrt 小白常用命令大全(openwrt操作命令)
- Linux-shell脚本多线程实现(shell 多线程并发执行)
- Thread.sleep(0):线程休眠0秒有什么意义?
- 40 个简单又有效的 Linux Shell 脚本示例
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)