2

我正在更改一个结构如下的 bash 脚本:

#somewhere in the code
sim_counts=#... some value
function_name()
{
    set $sim_counts
    for hostname in $linux_hostnames; do
        if [ $1 -eq 0 ]; then # if sim_counts equal 0
            shift  # jump forward in sim_counts
            continue 
        fi
    # ... more code
    shift
    done
}

然后在脚本中调用它:

function_name

我想给这个函数引入一个参数:

#somewhere in the code
sim_counts=#... some value
function_name()
{
    ip=$1
    set $sim_counts
    for hostname in $linux_hostnames; do
        if [ $1 -eq 0 ]; then # if sim_counts equal 0
            shift  # jump forward in sim_counts
            continue 
        fi
    # ... more code
    shift
    done
}

并通过以下方式调用该函数:

function_name 10.255.192.123

我应该怎么做才能避免$1函数参数和set命令中的其他值发生冲突?

4

1 回答 1

2

如果我正确阅读了Bash 参考手册中的set 内置页面,我相信您编写的代码会正常工作。从该页面引用:

剩余的 N 个参数是位置参数,并按顺序分配给 $1、$2、... $N。特殊参数 # 设置为 N。

本质上,位置变量的任何预先存在的值都将被吹走。该手册页上的第一句话也很有趣:

这个内置函数非常复杂,值得拥有自己的部分。

简而言之,我认为您的代码应该可以按预期工作。您已将$1(来自函数调用)的初始值保存到临时变量中;只要您参考$ip该特定值,您就应该很好。在我自己的测试脚本中,它似乎$1像我预期的那样被吹走了。

于 2013-02-08T15:05:39.337 回答