【问题标题】:Set in a bash script vs function parameter在 bash 脚本 vs 函数参数中设置
【发布时间】:2013-02-08 14:47:34
【问题描述】:

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

【问题讨论】:

  • $sim_counts 代表什么?
  • @JonahBishop 它是在特定机器上启动的进程的值。
  • 由于您在调用set 之前将函数的参数保存到ip,因此我不确定您是否存在真正的冲突。也就是说,为什么你需要在这里使用set?你不能像使用$1一样使用sim_counts吗?

标签: bash shell parameters


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 你是对的。 $ip 正确,$1 分配给 $sim_counts。谢谢。
猜你喜欢
  • 2014-07-09
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 2015-10-16
  • 2021-03-05
  • 2018-10-30
  • 2013-08-02
相关资源
最近更新 更多