bash中变量,可直接赋值使用
比如:variableName=value,根据值决定是文本,还是数字;一般为当前shell的全局变量/环境变量,printenv 命令用于显示所有环境变量。
Bash
#三种变量赋值方式,=左右不能有空格,value有空格要使用引号
variableName=value
variableName='value' # 值为value本身,不再做解析
variableName="value" # 会先解析value里面的变量和命令,得到结果后,再赋值给variable
# 使用command执行的结果,赋值到变量,推荐$()方式,但只在bash中有效。
variableName=$(command)
variableName=`command`
# 删除变量
unset variableName两种变量引用方式:$variableName或${variableName},${variableName}优点后面可以接其他字符。
子shell继承:export
变量未使用export时,只有当前shell可以使用,在子shell里不能使用。但使用export [选项] [变量名]=[值]后,子shell可以使用父shell的变量。
可用选项:
- -p:列出当前所有环境变量。
- -n:取消变量的导出,但变量仍在当前 Shell 中有效。
- -f:将函数名导出为环境变量。
注意: - export 的作用仅限于当前登录会话,退出后变量会失效。如果需要永久生效,可以将变量写入配置文件(如 ~/.bashrc 或 /etc/profile)。
- 父 Shell 无法访问子 Shell 中定义的变量,即使使用 export。
变量也可以提前声明
在声明之后,对于不符合声明的赋值,会被忽略。
Bash
declare option variableName # option: `-r` 只读变量,`-i` 整数变量,`-` 一个数组变量,`-f` 函数,`-x` 通过环境声明并导出到后续命令。示例:declare -i VN && VN=1 && VN=0.1 && echo $VN 的结果是1,不是0.1
本地变量/局部变量
local 是用于声明局部变量的关键字,在函数中,局部变量仅在该函数块内才有意义。
三种函数声明写法:
Bash
# 方式一
function funname () {
local variableName
local variableName=value
}
# 方式二
function funname {
local variableName
local variableName=value
}
#方式三
funname () {
local variableName=value
local variableName
}
#执行函数
funname [入参1] [入参2]变量替换与提取
方式一
| 符号 | 含义 |
|---|---|
${var} | 变量,界定范围 |
${var:-word} | 如果var为空或者未设定,返回word,var不变 |
${var:=word} | 如果var为空或者未设定,返回word,且var=word |
${var:+word} | 如果var有值,返回word,var不变 |
${var:?word} | 如果变量var为空或者未设定,返回word并退出shell;word没有值则输出:parameter null or not set,用于检测var是否被正常赋值 |
${var-word} | 如果var未设定,返回word,如果var未空或者有值,返回var |
方式二
| 符号 | 含义 |
|---|---|
${var:num} | 返回var中第num个字符到末尾的所有字符。 若num为正数,从左边0处开始; 若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如 ${var: -2}、${var:1-3}或${var:(-2)}。 |
${var:num1:num2} | 从var的第num1个位置开始,提取长度为num2的子串。num1是位置,num2是长度 |
${var/word1/word2} | 将var中第一个匹配到的word1替换为word2 |
${var//word1/word2} | 将var中所有word1替换为word2 |
bash 传参数引用
| 参数 | 说明 |
|---|---|
$# | 传递到脚本或函数的参数个数 |
$1 | 传递到脚本或函数的第一个参数值,同理类推$2~$9;但第10个就要书写为${10},和变量引用类似。 |
$* | 代表所有向脚本传递的参数字符串 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
发表回复