【问题标题】:bash - use a int variable as an index refering to position parameters passed to a functionbash - 使用 int 变量作为引用传递给函数的位置参数的索引
【发布时间】:2016-02-29 20:37:01
【问题描述】:

我想使用一个变量作为索引值来引用传递给脚本的位置变量,例如:

x=101
y=201
z=301

foo(){

    i=0;
    (( i+=1 )); # i=1
    echo "${$i}"; # parameter 1
    (( i+=1 )); # i=2
    echo "${$i}"; # parameter 2
    (( i+=1 )); # i=3
    echo "${$i}"; # parameter 3
}

foo x y z

输出:

101
201
301

在这种情况下,数组和循环将无济于事,我需要一个简单的方法来增加一个 int 变量并使用这个值作为索引来检索传递的方法参数。

建议?

【问题讨论】:

  • 提示:shellcheck 识别常见的错误和错误的尝试,including this one
  • 你可以用while [ $# -gt 0 ]; do echo "Next par is $1 "; shift; done显示pars

标签: linux bash shell variables


【解决方案1】:

我相信你这里需要间接变量扩展:

x=101
y=201
z=301

foo() {
   local i
   local v
   for ((i=1; i<=3; i++ )); do
     v="${!i}" # will get x, y, z
     echo "${!v}" # will get values of $x, $y, $z
   done
}

然后称它为:

foo x y z

101
201
301

【讨论】:

  • 哦,这就是 OP想要的!我完全误解了这个问题。
  • "在这种情况下,数组和循环将无济于事"
  • 这里没有数组,循环只是为了节省一些重复的代码。您可以删除循环并增加 $i 3 次,因为您有问题
  • @anubhava 我最诚挚的歉意,我误读并假设不正确,你是对的,谢谢!
猜你喜欢
  • 2013-02-09
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
相关资源
最近更新 更多