Shell中的特殊变量
特殊变量 | 作用 |
---|---|
$0 | 当前脚本的文件名(不带路经,带扩展名 .sh )xx.sh |
$NUM | 返回第NUM个参数。( n>0 ) |
$# | 统计传入的变量个数 e.g. ./xx.sh p1 p2 输出2 |
$* | 列出所有参数 。" $* " 整体列出 |
$@ | 列出所有参数 。"$@" 一一列出 |
$? | 返回上一个命令执行的返回码 |
$$ | 返回当前shell进程pid |
$! | 最后运行的后台Process的pid |
$- | 列出Set命令设定的Flag |
与∗与@区分
- 1 3
- 环绕双引号的时候∗环绕双引号的时候"*" 是一个整体 "2 $3"
- 1 3
- 环绕双引号的时候@环绕双引号的时候"@" 是一个列表 "2" "$3"
- 总之,没有引号都是列表,有引号@是列表。*只在有引号的时候是整体
Example:
#!/bin/bash
echo " $*=" $*
echo ""$*"=" "$*"
echo " $@=" $@
echo ""$@"=" "$@"
echo "print each paramter from $*"
for var in $*;do
echo "$var"
done
echo "print each paramter from $@"
for var in $@;do
echo "$var"
done
echo "print each paramter from "$*""
for var in "$*";do
echo "$var"
done
echo "print each paramter from "$@""
for var in "$@";do
echo "$var"
done
读写锁(RwLock<T>
)和互斥锁(Mutex<T>
)十分类似,不同在于RwLock<T>
对线程进行读者(Reader) 和 写者(Writer) 的区分,不像 Mutex<T>
只能独占访问。
该锁支持多个读者线程和一个写者线程,其中读线程只允许进行只读访问,而写线程只能进行独占写操作。只要线程没有拿到写锁,RwLock<T>
就允许任意数量的读线程获得读锁。
和 Mutex<T>
一样,RwLock<T>
也会因为panic而“中毒”。
读写锁实例
use std::sync::RwLock;
fn main() {
let lock = RwLock::new(5);
{
let r1 = lock.read().unwrap();
let r2 = lock.read().unwrap();
assert_eq!(*r1, 5);
assert_eq!(*r2, 5);
}
{
let mut w = lock.write().unwrap();
*w += 1;
assert_eq!(*w, 6);
}
}
读锁和写锁要使用显示作用域块隔开,这样的话,读锁或写锁才能在离开作用域之后自动释放;否则会引起死锁,因为读锁和写锁不能同时存在。
类似 switch,将值与多个模式进行比较,并根据匹配结果执行相应分支代码。
模式可以是变量、字面量、通配符,或其他内容。
match VALUE {
PATTERN => EXPRESSION,
...
}
注意:
- 模式必须覆盖(cover)所有可能,否则会出错。
- 分支关联代码是表达式,其返回值作为 match 结果。
- 分支代码块以逗号结束。