设置bash脚本vs函数参数

时间:2013-02-08 14:47:35

标签: bash shell parameters

我正在更改一个具有如下结构的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命令中的其他值?

1 个答案:

答案 0 :(得分:2)

如果我正在阅读Bash参考手册中的set builtin page,我相信您编写的代码将正常工作。从该页面引用:

  

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

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

  

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

简而言之,我认为您的代码应该按预期工作。您已将$1的初始值(从函数调用中)保存到临时变量中;只要你提到$ip这个特定的值,你应该是好的。在我自己的测试脚本中,似乎$1会像我预期的那样被吹走。