Shell特殊变量讲解:$n、$#、$*、$@、$?、$$各自代表的意思及用法

本文详细介绍了Shell脚本中参数的使用,包括$n获取参数值,$#获取参数个数,$*和$@的区别,以及$?获取命令退出状态码,$$获取当前进程ID。通过示例脚本和执行结果,展示了如何在Shell脚本中处理和操作命令行参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$n

  • 语法:$n,含义:用于接收shell脚本文件执行时传入的参数。

    $0
    #用于获取当前脚本文件名称

    $1~$9
    #代表输入的第一个参数到第9个参数 # 这都不用括号(要也不影响)

    第10个以上就用 数 字 比 如 {数字} 比如 {12} # 后面这些都必须要{ }括号

简单示例编辑一个名为456.sh的shell脚本:

#!/bin/bash

echo $0
echo "输入的第一个参数:$1"
echo "输入的第二个参数:$2"
echo "输入的第11个参数:${11}"

执行:bash 456.sh 11 22 33 44 55 66 77 88 99 1010 1111,获取的结果如下:
在这里插入图片描述

$#

  • 语法:$#,含义:获取shell脚本所有输入参数的个数(输入2个就是2个)。

    • echo "参数个数:${#}"
    • echo 参数个数:$#
      # 里面也不一定要引号,两行效果是一样的。

    Tips:

    • 强烈注意:在这里面,使用单引号,里面的内容会原样输出,里面加的任何变量,无论带括号不,都是原样输出;
    • 建议,使用双引号里面变量就加上{},没有引号就不要这{},(引号与{}有无在这里都没有影响)

$* and $@

  • 语法:$*$@,含义:都是获取所有传入参数,用于后续输出所有参数。

区别:

  • 直接原样,不用双引号括起来,那两者一样,都是原样

    echo '直接输出$*:'$*         # var1 var2 ... varn
    echo '直接输出$@:'$@         # var1 var2 ... varn   # 两者是一样的
    
  • 使用双引号括起来(不能是单引号,参上的Tips):那么"$*"跟上一样的,就是将这些拼接起来的字符串;而"$@"则是一个数组,是可以一个个取的,用循环验证。

简单示例(编辑一个名为456.sh的shell脚本):

#!/bin/bash

for item in "$*"          # 结果就是全部打印出来
do
    echo $item
done             
          
echo "************************"
                 # 这也是shell中的循环写法
for item in "$@"
do
    echo $item        # 这里也可以${item},但记得上面Tips
done 

执行:bash 456.sh 11 nihao 123 hello abc 456,结果如下:
在这里插入图片描述

$?

  • $?,含义:用于获取上一个shell命令的退出状态码,或者是函数的返回值

      echo "hello"
      echo $?        # 上一条肯定执行成功,这就会得到0
    

    得到0就代表执行成功,非0就是不成功

$$

  • $$,含义:用于获取当前shell环境的进程ID号

    • ps aux | grep bash
      echo $$           # 交互式shell下,这俩都是一样的
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值