【六月更文打卡】Rust基础语法学习

56 阅读2分钟

Shell中的特殊变量

特殊变量作用
$0当前脚本的文件名(不带路经,带扩展名 .sh )xx.sh
$NUM返回第NUM个参数。( n>0 )
$#统计传入的变量个数  e.g. ./xx.sh p1 p2     输出2
$*列出所有参数 。" $* " 整体列出
$@列出所有参数 。"$@" 一一列出
$?返回上一个命令执行的返回码
$$返回当前shell进程pid
$!最后运行的后台Process的pid
$-列出Set命令设定的Flag

与∗与@区分

  • 是一个列表,内容分别是* 是一个**列表**,内容分别是 1 22 3
  • 环绕双引号的时候∗环绕双引号的时候"*" 是一个整体 "11 2 $3"
  • @是一个列表,内容分别是@ 是一个**列表**,内容分别是 1 22 3
  • 环绕双引号的时候@环绕双引号的时候"@" 是一个列表 "1""1" "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 结果。
  • 分支代码块以逗号结束。