为了解析参数列表,我尝试实现一个常见的自顶向下解析方案。
我想知道为什么我的eat()
功能不起作用。因为位置参数 $1、$2、$3、... 位于该特定函数的上下文中。不是实际脚本的内容。真糟糕。我还没习惯 bash。
所以我的问题是,如果它是正确的,那么移位的范围也是我的eat()
函数的上下文,是吗?
真的没有办法从另一个函数内部转移脚本参数吗? :(
[这意味着我必须在 case 语句中实现所有逻辑(通常遵循自上而下的解析器)! (!?)]
答案1
函数可以返回它所传递的参数的全部(或子集)(例如通过全局数组),然后调用脚本可以使用它来设置自己的参数。例如
#!/bin/bash
declare -a args
nofoo() {
# we don't like "--foo", it is forbidden!
for a in "$@"; do
[ "$a" != "--foo" ] && args+=("$a")
done
}
nofoo "$@"
set -- "${args[@]}"
来自help set
bash:
放:
set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
设置或取消设置 shell 选项和位置参数的值。
更改 shell 属性和位置参数的值,或显示 shell 变量的名称和值。
[...]
--
将任何剩余的参数分配给位置参数。如果没有剩余参数,则取消设置位置参数。