[转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

shell,脚本,各种,符号,意义 · 浏览次数 : 0

小编点评

## Shell字符 $ 的各种用法 **普通字符** 在Shell中除了本身的字面意思外,没有其他特殊意义,即普通纯文本。 **元字符** `$` 是 Shell 的保留字符,在Shell中有着特殊的含义。它用于: * **引用参数值:** `$1`、`$2`、`$@` 等表示脚本传递的各个参数值。 * **特殊运算符:** `$*`、`$$` 等表示将所有参数整合为一个字符串。 * **分割参数:** `$` 在 `$*` 中被视为一个分号,将所有参数视为一个字符串。 **常见用法:** * `$#`:显示参数个数。 * `$0`:显示脚本本身的名字。 * `$1`:显示第一个参数的值。 * `$2`:显示第二个参数的值。 * `$*`:显示所有参数的值,与 `$@`相同,但每个参数被分割独立。 * `$$`:用于双引号内的参数传递。 * `$*`:用于双引号内的参数传递。 **示例:** ```bash # 显示参数个数 echo "参数个数:$#" # 显示脚本名字 echo "脚本名字:$0" # 显示第一个参数 echo "第一个参数:$1" # 显示第二个参数 echo "第二个参数:$2" # 显示所有参数 echo "所有参数:$@" # 显示字符串所有参数 echo "字符串所有参数:$*" # 显示当前脚本进程ID号 echo "当前脚本进程ID:$$" # 显示命令退出状态 echo "命令退出状态:$?" ``` **总结:** * `$` 是一个特殊字符,用于引用参数值、特殊运算符和参数分割。 * 不同类型的字符在不同的场景下有着不同的作用。

正文

概述

shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。

今天主要介绍一下shell中字符$的各种用法。

转义字符$

在linux shell脚本中经常用到字符

    ,下面是
   
  
  
   ,下面是
  
 
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.6833em;"></span><span class="mord cjk_fallback">,下面是</span></span></span></span></span>的一些常见用法</p> 

$# 是传给脚本的参数个数

$0 是脚本本身的名字

$1 是传递给该shell脚本的第一个参数

$2 是传递给该shell脚本的第二个参数

$@ 是传给脚本的所有参数的列表

$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个

$$ 是脚本运行的当前进程ID号

$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

测试脚本

为了方便大家理解,简单写了一个脚本做演示:

#!/bin/bash
echo "参数个数:$#"
echo "脚本名字:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "所有参数:$@"
echo "字符串所有参数:$*"
echo "当前脚本进程ID:$$"
echo "命令退出状态:$?" 

    执行结果:
    在这里插入图片描述

    $*与 $@不同点:

    当被双引号包裹时,$@与没有被双引号包裹时没有变化,$@仍然是一个数组,
    每个参数依然是分割独立的;但当$*被双引号包裹时,SHELL会将所有参数整合为一个字符串。
    

      测试脚本如下:

      root@kylin-vmwarevirtualplatform:/home/kylin/桌面# cat test1.sh 
      #!/bin/bash
      echo "所有参数:"
      for var in "$@"
      do
      echo $var
      done
      echo 字符串所有参数:
      for var1 in "$*"
      do
      echo $var1
      done
      

        执行结果:
        在这里插入图片描述

        与[转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义相似的内容:

        [转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

        概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。 今天主要介绍一下shell中字符$的各种用法。 转义字符$ 在linux shell脚本中经常用到字符 ,下面是 ,

        [转帖]shell脚本中$0 $1 $# $@ $* $? $ 的各种符号的意义

        概述 shell中有两类字符,一类是普通字符,在Shell中除了本身的字面意思外没有其他特殊意义,即普通纯文本;另一类即元字符,是Shell的保留字符,在Shell中有着特殊的含义。 今天主要介绍一下shell中字符$的各种用法。 转义字符$ 在linux shell脚本中经常用到字符 ,下面是 ,

        [转帖]Linux中最全shell命令&常用注意事项

        在编辑linux脚本中不断的会用到复杂的脚本编辑,写文章记录。 Linux命令大全(手册) – 真正好用的Linux命令在线查询网站 目录 推荐书籍: Linux常用命令 Linux 常用命令 在linux shell脚本中root切换到普通用户执行脚本 Linux—shell中$(( ))、$(

        [转帖][Docker] Windows里运行docker执行sh文件报错 $'\r': command not found

        https://www.cnblogs.com/MasterMonkInTemple/p/16358366.html 出现这样的错误,是因为Shell脚本在Windows系统编写时,每行结尾是\r\n,而在Linux系统中行每行结尾是\n,所以在Linux系统中运行脚本时,会认为\r是一个字符,导致

        [转帖]shell脚本字符串截取的8种方法

        https://www.cnblogs.com/zwgblog/p/6031256.html 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符。 1 echo ${var#*//} 其中 var 是变量名,# 号是运算符,*//

        [转帖]Shell 脚本中经典的13个面试题

        经典的Shell十三问 1. 为何叫做shell?2. Shell prompt(PS1)与Carriage Return(CR)的关系?3. 别人echo, 你也echo, 是问echo知多少?4. ""(双引号)与(单引号)有什么区别?5. var=value? export前后差在哪?6. e

        [转帖]Shell脚本中利用expect实现非交互式

        https://developer.aliyun.com/article/885723?spm=a2c6h.24874632.expert-profile.295.7c46cfe9h5DxWK 简介: expect非交互式 expect可以在脚本中完成一些交互式的操作,例如远程登录时要输入yes或者

        [转帖]Linux Shell:date日期时间操作

        https://www.jianshu.com/p/cc9ebb212a8e 整理Linux Shell脚本中常用的日期操作,给予date命令,主要用法总结 获得当前日期,时间戳,date,date '+%s' 日期解析(字符串转日期,时间戳转日期)date -d 日期格式化输出,date '+%'

        [转帖]Linux平台shell脚本输入密码,不显示明文

        需求:shell脚本中输入密码,要求不显示明文,需要将其转换为“*”星号,或者不显示 实现方案:有两种实现方案,一是通过stty命令来实现,二是直接使用read来实现 方案一:使用stty来实现 使用stty -echo可以实现不显示密码,就像登录Linux系统输入密码时一样,stty的代码如下:

        [转帖]如何通过shell脚本对一个文件中的所有数值相加并求和

        https://developer.aliyun.com/article/886170?spm=a2c6h.24874632.expert-profile.255.7c46cfe9h5DxWK 1.背景 在一些巡检脚本中有时通常需要把一个文件中的数值进行相加得出综合,由于是文件中的所有数值,因此不能