Shell特殊参数变量

发布时间 2024-01-02 14:10:54作者: 与太阳肩并肩

1.Shell变量

  1.1.本地变量

    定义shell变量,变量不需要加美元符`$`

    本地变量只在用户当前shell生存期中有效,如:

  1.2.变量定义

    1.2.1 变量名要求:字母、数字、下划线组成、可以是字母或是下划线开头,如:

      wayne

      wayne_123

      _wayne_123

    1.2.2 变量名严格区分大小写:

      Way_ne

      way_ne

    1.2.3 取出变量值:

      单引号,所见所得,强引用

      双引号,输出引号里所有内容,识别特殊符号,弱引用

      无引号,连续的符号可以不加引号,有空格则有歧义,最好使用双引号

      反引号,引用命令执行结果,等于 $() 用法

    1.2.4 特殊变量:

      shell的特殊变量,用在如脚本,函数传递参数使用,有如下特殊的,位置参数变量

      参数传递,案例:

  位置参数的获取演示:

    $0  获取she11脚本文件名,以及脚本路径
    $n  获取shel1脚本的第n个参数,n在1~9之间,如$1 $2,$9 ,大于9则需要写,$(10],参数空格隔开
    $#  获取执行的she11脚本后面的参数总个数

    $*   获取shel1脚本所有参数,不加引号等同于$@作用,加上引号"$*"作用是 接收所有参数为单个字符串,"$1 $2..
    $@  不加引号,效果同上,加引号,是接收所有参数为独立字符串,如”$1”“$2”"$3" 。..,空格保留

 

$*和$@的区别:

  1.$*$@ 都表示传递给函数或脚本的所有参数

    当$*$@ 不被双引号 " "包围时,他们之间没有任何区别,都是将接受到的每个参数看做一份数据,彼此之间以空格来分隔。

    当$* 和 $@ 被双引号 " "包围时,就会有区别的:
      区别1:"$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。

      结果1:"Wanye wxl 100 200 300 400"

      区别2:"$@"仍然将每个参数都看做一份数据,彼此之间是独立的。

      结果2:

        "Wanye"

        "wxl"

        "100"

        "200"

        "300"

        "400"

      案例:

        比如传递5个参数,对于"$*"来说,这5个参数会合并到一起形成一份数据,他们之间是无法分割的;对于"$@"来说,这5个参数是互相独立的,他们是5份数据。

        如果直接用echo直接打印"$*"和"$@"做对比,是看不出区别的;但是如果使用for循环来逐个输出数据,立即就看出区别

      实践"$*" 和"$@" 的区别:

        反斜杠“\”,是转义符号的概念

        "$*"和"$@"分别实行for循环输出的结果: