参数传递

参考:Shell 传递参数

参数传递分两部分,一是命令行参数的传递,而是函数参数的传递

下面学习命令行参数的传递,函数参数的传递在后续有关函数的内容中学习

特殊符号

通过特殊符号来解析命令行参数的传递

  • $#:参数个数
  • $*:得到单个字符串,返回所有向脚本传递的参数
  • $$:当前脚本运行的进程ID
  • $!:后台运行的最后一个进程ID
  • $@:返回所有参数
  • $-:显示shell使用的当前选项
  • $?:显示最后命令的退出状态。0表示没有错误,其他数字表示有错误

另外,$1表示获取第一个参数,$2表示获取第二个参数,以此类推

$* vs. $@

特殊符号$*$@都返回所有参数值,但是其格式不一致

$*得到的是一个字符串,格式为"$1 $2 $3",而$@得到的是一个数组,格式为"$1" "$2" "$3"

$ cat test.sh 
#!/bin/bash

for i in "$*"
do
    echo $i
done

for i in "$@"
do
    echo $i
done

结果$*以单个字符串输出,$@输出单独的参数

$ bash test.sh a b c d
a b c d
a
b
c
d