linux shell中$# $@ $*等符号的含义

#@TOC

第一: 符号汇总

符号含义
$$进程的ID
$?脚本执行的状态码,0:正常;非0:错误
$#脚本执行时,传入参数的个数
$0执行脚本的名称
$1/2/3…脚本执行时,传入的第1/2/3/…个参数值
$*脚本执行时,传入参数的列表
$@脚本执行时,传入参数的所有个数

第二: 使用说明

$$ $# $? $0 $1 $2符号的使用和实例
test.sh脚本内容如下:

#!/usr/bin/bash
while getopts "i:o:t:" arg
do
    case $arg in
        i)
          input="$OPTARG";;
        o)
          output="$OPTARG";;
        t)
          t="$OPTARG";;
        ?)
        exit 1 ;;
    esac
done
echo -e "参数值:"
echo -e "\tinput  = $input"
echo -e "\toutput = $output"
echo -e "\tt      = $t"
echo -e "=============="

echo -e "\$$ is $$"
echo -e "\$#  $#"
echo -e "\$0 is $0"
echo -e "\$1 is $1"
echo -e "\$2 is $2"
echo -e "\$? is $?"
# 执行如下命令:
sh test.sh -i input.txt -o output.txt -t 10
# 结果为:
# 参数值:
# 	input  = input.txt
# 	output = output.txt
# 	t      = 10
# ==============
# $$ is 42038
# $#  6
# $0 is test.sh
# $1 is -i
# $2 is input.txt
# $? is 0

$*的使用实例

注:$* 会将命令行的所有参数(不包含$0)看成一个整体,是一个列表;
test1.sh内容如下:

#!/usr/bin/bash
echo "\$* 的使用"
echo -e "\$* is $*"
for i in "$*";do echo $i;done 
for i in $*;do echo $i;done 

# 执行如下命令:
sh test1.sh a b c
# 结果为:
# $* 的使用
# $* is a b c
# a b c
# a
# b
# c

$@的使用实例

注:$@ 会将命令行的所有参数(不包含$0)区分来看待;
test1.sh内容如下:

#!/usr/bin/bash
echo "\$@ 的使用"
echo -e "\$@ is $*"
for i in "$@";do echo $i;done
for i in $@;do echo $i;done
# 执行如下命令:
sh test2.sh a b c
# 结果为:
# $@ 的使用
# $@ is a b c
# a
# b
# c
# a
# b
# c

第三:$*和$@的区别

  1. 都是用来获取所有脚本参数的特殊变量;
  2. $* 会把所有的参数解释成一个单词(单个字符串),即每个参数之间不会加上空格,全部组合成一个字符串,用IFS(默认是空格)分隔。所以,将*放在双引号里,预处理$符号,保持长字符串的完整性;
  3. $@会把所有的参数看成是独立的单词(多个独立的字符串),即每个参数之间加上空格,将每个参数作为一个独立的字符串处理;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值