Shell函数参数

2023-05-16

在shell中调用函数时,可以向其传递参数,其中常用的特殊变量如下表所示:

函数参数含义
$#传递到脚本或函数的参数个数
$n

$1表示第一个参数,$2表示第二个参数……

注意,当n>=10时,要使用${n}来获取相应的参数

$*以一个字符串的形式输出传递给函数或脚本的所有参数
$@以每个参数的形式输出传递给函数或脚本的所有参数
$!上一个命令的进程ID号即PID
$$脚本运行的当前进程ID号即PID
$0当前程序的名称
$?显示前一个命令或函数的的退出状态,0表示没有错误,其他任何值表示有错误
$-显示shell使用的当前选项,与set命令功能相同

脚本示例如下所示:

#!/bin/bash

funWithParam(){
    echo "传递到函数的参数总数:$#个"
    echo "第一个参数为:$1 !"
    echo "第二个参数为:$2 !"
    echo "第十个参数为:$10 !"
    echo "第十个参数为:${10} !"
    echo "字符串形式输出所有的参数:$*"
    echo "每个字符串形式输出所有的参数:$@"
    echo "上一个命令的PID:$!"
    echo "当前运行进程的ID:$$"
    echo "当前程序的名称:$0"
    echo "显示shell使用的当前选项:$-"
}
 funWithParam 1 2 3 4 5 6 7 8 9 34 35

输出的结果为:

传递到函数的参数总数:11个
第一个参数为:1 
第二个参数为:2 
第十个参数为:10 
第十个参数为:34 
字符串形式输出所有的参数:1 2 3 4 5 6 7 8 9 34 35
每个字符串形式输出所有的参数:1 2 3 4 5 6 7 8 9 34 35
上一个命令的PID:
当前运行进程的ID:5358
当前程序的名称:./test.sh
显示shell使用的当前选项:hB

特别注意:

1、$10不能获取第十个参数,要使用${10}来获取

2、$@与$*在没有被双引号包括时,输出是没有区别的,如上面的例子所示。但如果有双引号,$@会将每个参数作为单独的参数输出,$*会把每个参数作为一个整体的字符串输出

[root@171-rc6-2-4 shell]cat test.sh
#!/bin/bash
funwithparm1(){
    echo "所有参数作为一个字符串输出:\"\$*\" "
    for i in "$*"
    do
       echo "$i"
    done
    echo "每个参数作为一个整体输出:\"\$@\" "
    for j in "$@"
    do
        echo "$j"
    done
}
funwithparm1 1 2 3 4

[root@171-rc6-2-4 shell]# ./test.sh 
所有参数作为一个字符串输出:"$*" 
1 2 3 4
每个参数作为一个整体输出:"$@" 
1
2
3
4

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell函数参数 的相关文章

随机推荐