【问题标题】:How can I chose the array from all the arguments?如何从所有参数中选择数组?
【发布时间】:2018-03-06 04:12:28
【问题描述】:

给定数组 arr 和字符串 str 。如果我让它们以另一种方式运行:

func "${arr[@]}" ${str}

如何在func函数中定义数组和字符串?

function func {
local arr=....
local str=....
}

根据我的理解(对吗?)如果我会这样做:local arr=("$@") 我会得到:
arr[0]=the first argument - in this case it's will be all the array
arr[1]=str

(根据我的检查,local arr=("$@") 给出的数组与 arr(我发送的内容)完全相同,除了它添加了 str 作为该数组中的最后一个元素。)

[我不问“如何在 bash 中发送数组”,但是,我如何从所有参数中选择数组]

【问题讨论】:

  • 你必须使用那个命令吗?使用func "$str" "${arr[@]}" 会让事情变得更容易。
  • @Socowi 我知道,这样你可以跳过第一个元素。但是我想知道我带来的案子该如何处理?
  • bash 中没有数组值。您将数组的所有 元素 作为单独的参数传递,而不是数组本身。

标签: arrays bash shell scripting


【解决方案1】:

$@所有传递给函数的参数。 检索最后一个参数很容易。只需使用最后一个数组条目。 之后,您必须从数组中删除最后一个条目。

function func {
    local arr=("$@")
    local str="${arr[-1]}"
    unset 'arr[-1]'
}

确保始终使用至少一个参数调用func,否则脚本将失败。

【讨论】:

  • 为什么是“-1”?不需要是"${arr[$((${#arr[@]} - 1))]}"?
  • 较新版本的 bash 允许负索引。 -1 是最后一个数组条目,-2 是倒数第二个数组条目,依此类推。
猜你喜欢
  • 1970-01-01
  • 2011-11-06
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多