shell系统$的含义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell系统$的含义相关的知识,希望对你有一定的参考价值。

#!/bin/bash #Author:Sparrow #Name:explain_shell_parameters #Date 2020-3-11 #Description: #Explain what $0 $1 $2 $3 $4 $@ $* $# mean #Program begin #Ensure enter six parameters at least if [ $# -le 6 ];then echo "Please enter 6 parameters at least!" exit 1 fi #Echo every $ echo "$0 --------- $0" echo "$1 --------- $1" echo "$2 --------- $2" echo "$3 --------- $3" echo "$4 --------- $4" echo "$5 --------- $5" echo "$6 --------- $6" echo "$7 --------- $7" echo "$8 --------- $8" echo "$# --------- $#" echo "$@ --------- $@" echo "$* --------- $*" echo "$? --------- $?"

l输出结果

sh explain_shell_parameters.sh 1 2 3 4 5 6 7 8

#结果
#$0即脚本名
$0  ---------  explain_shell_parameters.sh 
$1  ---------  1 
$2  ---------  2 
$3  ---------  3 
$4  ---------  4 
$5  ---------  5 
$6  ---------  6 
$7  ---------  7 
$8  ---------  8 
$#  ---------  8 
$@  ---------1 2 3 4 5 6 7 8 
$*  ---------  1 2 3 4 5 6 7 8
#上一条语句的执行结果
$?  ---------  0

$* 和 $@ 的区别

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

"$*"会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
"$@"仍然将每个参数都看作一份数据,彼此之间是独立的。

比如传递了 5 个参数,那么对于"$*"来说,
这 5 个参数会合并到一起形成一份数据,它们之间是无法分割的;

而对于"$@"来说,这 5 个参数是相互独立的,
它们是 5 份数据。
如果使用 echo 直接输出"$*"和"$@"做对比,是看不出区别的;
但如果使用 for 循环来逐个输出数据,立即就能看出区别来。

以上是关于shell系统$的含义的主要内容,如果未能解决你的问题,请参考以下文章

代码片段:Shell脚本实现重复执行和多进程

shell $x的含义

Shell特殊变量含义

linux中shell变量$#,$@,$0,$1,$2的含义

shell中变量$系列的含义

linux中shell变量$#,$@,$0,$1,$2的含义解释