TCZ*_*CZ8 8 shell-script function
我正在尝试创建一个函数并相信我找到了一个很好的工作示例,但我不了解它背后的所有逻辑。
更具体地说,在“while”行上,有人可以解释什么是测试,什么是测试?什么是 $#(# 不是注释字符吗?)以及 -gt 0 参数是从哪里来的?在 while 手册页中找不到它。
这是示例:
function my_function()
{
while test $# -gt 0
do
$
echo "$1"
shift
done
}
Run Code Online (Sandbox Code Playgroud)
谢谢你。
AMA*_*nc. 11
虽然#
它自己绝对是一个注释,但$#
包含传递给您的函数的参数数量。
test
是一个程序,可以让您执行各种测试,例如,如果一个数字大于另一个数字(如果您的运算符是-gt
;还有许多其他运算符,请参阅man test
)。如果测试成功(在这种情况下,如果the number of parameters
IS 大于 0),它将返回成功。
该shift
命令丢弃第一个参数。也会减少$#
整个代码可以看成:用一个参数做一些事情(在这个例子中,把它显示在屏幕上),然后丢弃它;重复直到没有参数。
如果要查看剩下的所有参数,对调试有用,请查看 $@
小智 5
$#
==> 脚本参数传递
test
==>条件评估命令
-gt
==>代表大于
test a -gt b
==> 如果 a 大于 b,则为 true,否则为 false
把它们放在一起:
while test $# -gt 0
==> 当传递的参数更多时(之所以改变是因为shift)
让事情变得棘手的是shift
while 循环体内。
$1
==> 始终代表第一个参数
为了使这一点更具体,假设您正在传递参数a
,b
和c
。
$1
==> 代表a
这是你的第一个参数
通过调用 now shift
,a
已消失,您的参数列表现在已存在b
,c
因此如果您调用$1
now ,b
则它现在是列表中的第一个参数。shift
再次调用您的参数列表现在只是c
,因此$1
是现在c
。再调用shift
一次会使参数列表为空,因此 while 条件将不会成功(因为参数列表不再大于 0,因为它的大小现在为零),这将导致 while 循环终止。
shift
使用和引用当前参数有什么好处$1
?
它使您可以灵活地在脚本中提前不知道脚本中传递了多少个参数,并且无论如何都可以在 while 循环中一一迭代它们,始终引用当前参数,因为$1
这意味着脚本的头部参数列表。通过shift
ing 最终,参数列表将为空,因此使用 while 条件来检查它是否大于零以便终止而不是无限循环非常重要。
归档时间: |
|
查看次数: |
24262 次 |
最近记录: |