Linux脚本参数$#,$$,$n,$@,$*区别

看过又忘了,记性不好,还是记下来吧。

大概总结一下:

变量名含义
$0表示当前脚本的文件名
$n传递给脚本的第几个参数,n表示第几个, n >= 1
$#表示参数的个数
$*表示所有的参数,注意与 "$*" 的区别
$@表示所有的参数, 注意与 "$@", "$*"的区别
$$表示当前正在执行进程的PID
$?表示上一个命令的执行结果, 0表示正常,非0表示异常

几个注意点:

1. 关于$0:

 表示当前脚本的文件名, 但脚本的执行方式不同,可能 $0 获取到的值也不同:

sh dir/test.sh  #$0值为 dir/test.sh
sh test.sh      #$0值为test.sh
./test.sh       #$0值为./test.sh
2. 关于$#:

  注意参数的个数,如果用 "" 包裹,则算做一个参数,除此之外用空格隔开的就算一个参数:

sh test.sh "1 2 3" 4 5 abc 9 #$#的值为5"1 2 3"算一个,4算一个,5算一个,abc算一个,9 算一个
3. 关于$*和$@:

  在使用时$*和$@都未使用""括起来时,他们的含义是一样的:

sh test.sh "1 2 3" 4 5 abc 9

#假设test.sh 包含如下内容:
#验证$*
for var in $*
do
        echo "$var"
done

#验证$@
for var in $@
do
        echo "$var"
done

 他们输出的结果相同,都为:

1
2
3
4
5
abc
9

注意:他们会忽略"", 也就是虽然$#的值为5,但是却输出了7行。

 在使用$* 用括号括起来时,也就是"$*"时,会将所有参数作为一个整体输出:

sh test.sh "1 2 3" 4 5 abc 9

#假设test.sh 包含如下内容:
#验证"$*"
for var in "$*"
do
        echo "$var"
done

 输出结果如下, for循环只执行了一次:

1 2 3 4 5 abc 9

 在使用$@ 用括号括起来时,也就是 "$@"时,会将参数分别输出,但是会将""括起来的参数整体输出:

sh test.sh "1 2 3" 4 5 abc 9

#假设test.sh 包含如下内容:
#验证"$@"
for var in "$@"
do
        echo "$var"
done

 输出结果如下, for 循环执行了5次,次数恰好跟 $#的值相同:

1 2 3
4
5
abc
9
4. 将$*,$@赋值给变量:
sh test.sh "1 2 3" 4 5 abc 9

res=$@
res1="$@"
res2=$*
res3="$*"
for var  in $res
do
        echo "$var"
done

for var1 in $res1
do
        echo "$var1"
done

for var2 in $res2
do
        echo "$var2"
done

for var3 in $res3
do
        echo "$var3"
done

 四种方式输出结果均相同:

1
2
3
4
5
abc
9

 形如for var3 in $res3 和 for var3 in “$res3” 却是不同的结果。
 在写脚本时注意for … in y 这种,不要将y带上双引号,否则循环只会执行一次,不是想要的结果。

 到此结束。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值