Shell脚本--位置参数

0. 特殊参数

在介绍本章内容之前,先介绍几个特殊变量:
$0    当前脚本的文件名。
$n    传递给脚本或函数的参数。n是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。
$#    传递给脚本或函数的参数个数。
$*    传递给脚本或函数的所有参数。
$@    传递给脚本或函数的所有参数。不加双引号""时,和$*没有区别,每个参数都是一份数据。但是,"$*"代表所有参数整体上看做一份数据,"$@"代表每个参数仍然都是一份数据。
$?    上个命令的退出状态,或函数的返回值。
$$    当前Shell进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
1. 给脚本传递位置参数
运行 Shell 脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收。
示例:
#!/bin/bash

echo "\$#: $#"
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
echo "\$*: $*"
echo "\$@: $@"
echo "\$$: $$"
然后执行命令 sh cstring.sh hello world ,其结果为:
$#: 2
$0: cstring.sh
$1: hello
$2: world
$*: hello world
$@: hello world
$$: 3383
如果参数个数太多,达到或者超过了 9 个,那么就得用 ${10} 的形式来接收了。

2. 给函数传递位置参数

同样,在调用函数时也可以传递参数。Shell 函数参数的传递和其它编程语言不同,没有所谓的形参和实参,在定义函数时也不用指明参数的名字和数目。这些传递进来的参数,在函数内部就也使用 $n 的形式接收。
示例:
#!/bin/bash

function foo() {
    echo "\$#: $#"
    echo "\$0: $0"
    echo "\$1: $1"
    echo "\$2: $2"
    echo "\$*: $*"
    echo "\$@: $@"
    echo "\$$: $$"
}

foo $1 $2
然后执行命令 sh cstring.sh hello world ,其结果为:
$#: 2
$0: cstring.sh
$1: hello
$2: world
$*: hello world
$@: hello world
$$: 3401

3. $* 和 $@

在特殊参数已经说明两者区别,下面以示例来演示:
#!/bin/bash

echo "\$*: $*"
echo "for val in \$*"
for val in $*
do
    echo ${val}
done
echo "for val in \"\$*\""
for val in "$*"
do
    echo ${val}
done
echo --------------------
echo "\$@: $@"
echo "for val in \$@"
for val in $@
do
    echo ${val}
done
echo "for val in \"\$@\""
for val in "$@"
do
    echo ${val}
done
然后执行命令 sh cstring.sh hello world ,其结果为:
$*: hello world
for val in $*
hello
world
for val in "$*"
hello world
--------------------
$@: hello world
for val in $@
hello
world
for val in "$@"
hello
world

 

posted @ 2023-04-18 09:53  时间在哪  阅读(113)  评论(0)    收藏  举报