如何在bash中获取第n个位置参数?

84
如何在Bash中获取第n个位置参数,其中n是变量?
4个回答

127

使用Bash的间接引用特性:

#!/bin/bash
n=3
echo ${!n}

运行该文件:

$ ./ind apple banana cantaloupe dates

生成:

cantaloupe

编辑:

您也可以进行数组切片:

echo ${@:$n:1}

但不包括数组下标:

echo ${@[n]}  #  WON'T WORK

1
@AlexanderOleynikov 它会导致“坏替换”错误;我猜是因为 @(和 *)是“特殊参数”,因为它们不是有效的数组名称?${@}确实是指定了编号的参数,但是@不是一个数组,也没有实现支持将其解析为数组,而例如"${unsetvariable}"将产生空输出,因为它是一个有效的数组/变量名称,只是还没有设置(这些异常在bash的源代码中被特别处理,我想)。我试图在man bash中找到更好的原因,但是扫描@让我失去了耐心。;P - Victor Zamanian
在 zsh 中,最后一个选项有效(因为为什么不呢)。 - Michaël

13

如果变量中保存了N,则使用:

eval echo \${$N}

如果是常量,请使用

echo ${12}

自从

echo $12

并不意味着相同!


2
${12}$12有什么区别? - HelloGoodbye
3
嗨@HelloGoodbye,“$12”表示“$1”和数字“2”。 “${12}”表示第12个参数。 - Johannes Weiss

-2

这个回答并没有解决原帖提出的问题。他明确询问如何通过存储在变量中的索引获取参数。 - Marcel Valdez Orozco

-2

如果您想要获取特定的第n个字段或者最后一个字段,最简单的方法是通过以下方式:

#!/usr/bin/sh
echo ${@:${#}}

输出

sh 5.1$ sh nth_field.sh 1 23 1000 103399
103399

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接