文章目录
1. shell变量
1. linux环境中使用
1. long_str="linux shell string" # 定义变量, =两边不能存在空格
2. echo ${long_str} # 引用变量;这是最安全的写法, 若使用$long_str; 可能出错.
3. echo "hello, $long_str" # 只有双引号才能转义变量;使用单引号,无法转义变量。
2. shell脚本中使用: 在父shell中的定义的变量,在子shell中无法访问到。
3. 默认shell中定义的变量是全局的;但是可以通过local
修饰变量,使得此变量为局部变量。
num=123
func1() {
num=234
echo $num
}
func2() {
local num=456 #这是方法内部变量,会把外界的num屏蔽掉。
echo $num
}
echo "Function last: $num"
func1 # 调用func1方法
echo "Func1 use: $num"
func2 # 调用func2方法
echo "Func2 use: $num"
4. 变量替换符
变量替换符 | 描述 |
---|---|
${varname:-word} | 若varname存在且非null时,返回varName的值;否则返回word |
${varname:=word} | 若varname存在且非null时,返回varName的值;否则将其设置为word,然后返回值 |
${varname:?message} | 若varname存在且非null时,返回varName的值;否则打印message,退出脚本 |
${varname:+word} | 若varname存在且非null时,返回word的值;否则返回null |
5. 模式匹配运算符
变量运算符 | 描述 |
---|---|
${varname#parttern} | 如果模式匹配变量取值的开头处,则删除匹配的最短部分,并返回剩下部分。eg:my_path="/path/abc/ab" 结果:abc/ab |
${varname##parttern} | 如果模式匹配变量取值的开头处,则删除匹配的最长部分,并返回剩下部分。eg:my_path="/path/abc/ab" 结果:ab |
${varname%parttern} | 如果模式匹配变量取值的结尾处,则删除匹配的最短部分,并返回剩下部分。eg:my_path="/path/abc/ab" 结果:/path/abc |
${varname%%parttern} | 如果模式匹配变量取值的结尾处,则删除匹配的最长部分,并返回剩下部分。eg:my_path="/path/abc/ab" 结果:空 |
${varname/parttern/string} ${varname//parttern/string} | 讲varname中匹配模式的最长部分替换为string。第一种格式中,只有匹配的第一部分被替换;第二格式中,varname中所有匹配的部分都被替换。若模式以# 开头,则必须匹配varname的开头;若模 |
式以%
开头则,必须匹配varname的结尾。若string为空时,匹配部分被删除。若varname为@
或*
的时候,操作被依次应用于每个位置参数,并扩展为结果列表。 eg:
m
y
p
a
t
h
/
a
b
c
/
X
X
X
结
果
:
/
p
a
t
h
/
X
X
X
/
a
b
‘
{my_path/abc/XXX} 结果:/path/XXX/ab `
mypath/abc/XXX结果:/path/XXX/ab‘{#varname}`: 可以得到varname的字符数量。
6.删除变量
unset hello_shell
:就会删除此变量,无法再次获取里面的数据。