【问题标题】:(Bash) Dynamically save n arguments(Bash) 动态保存 n 个参数
【发布时间】:2015-01-07 13:25:18
【问题描述】:

我试图找到一种方法,将我将为 shell 脚本传递的所有参数动态存储在数组中。当我必须循环遍历每个参数以进一步使用它们时,这将有所帮助。

这是我的问题的答案。

#!bin/bash
#Overloop alle gegeven argumenten en sla ze op in arg(plaatsvhargument)
arr=( "$@" )

#Code om te testen of het wel werkt
y=0
while [[ $y -lt $# ]]

do

        val=${arr[$y]}
        echo $val
        (( y++))
done

我知道我可以这样做,从数组中取出每个参数。

for i in ${arr[@]}
do
        echo $i    
done

我的问题是,当我运行脚本时,我最终保存了参数的位置,并且在此过程中丢失了一个参数。示例:

bash testscript.sh 1 2 2 3 1  gives me 2 2 3 1 (empty)

我做错了什么,你们有解决我的问题的方法吗?

【问题讨论】:

  • 为什么不直接做:arr=( "$@" ) 来创建你的数组。
  • @anubhava,所以你的意思是删除整个第一个while循环并用arr=( "$@" ) 替换它
  • @anubhava 还是有问题;我编辑了我的问题,因为我觉得它是正确的方式。
  • 由于您将 args 存储在 awway 中,因此请使用该数组的长度来保持一致:while [[ $y -lt ${#arr[@]} ]]

标签: bash dynamic arguments


【解决方案1】:

代替:

y=1

你应该使用:

y=0

因为数组索引在 BASH 中从 0 开始。

同时使用:

arr=( "$@" )

使用传递给脚本的所有参数创建您的数组(如我上面的 cmets)。

你也可以像这样在 BASH 中循环遍历数组元素:

for ((y=0; y<$#; y++))
do
        val="${arr[$y]}"
        echo "$val"
done

【讨论】:

  • 循环遍历"$@" 更加简单:for arg; do ... done。你也可以使用${arr[y]}
  • @anubhava 将 y 更改为 0,但我仍然缺少一个参数。 shell 脚本名称后的第一个
  • @MrKickkiller 您帖子中的代码和这个for 循环都可以在您的示例输入上正常工作,因为我更改了y=0。仔细检查您的代码(如果您愿意,可以将其作为编辑添加到帖子中)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-27
  • 2014-12-26
  • 2014-04-30
  • 1970-01-01
  • 2019-07-07
  • 1970-01-01
相关资源
最近更新 更多