如何在Bash中获取第
n
个位置参数,其中n
是变量?使用Bash的间接引用特性:
#!/bin/bash
n=3
echo ${!n}
运行该文件:
$ ./ind apple banana cantaloupe dates
生成:
cantaloupe
编辑:
您也可以进行数组切片:
echo ${@:$n:1}
但不包括数组下标:
echo ${@[n]} # WON'T WORK
如果变量中保存了N
,则使用:
eval echo \${$N}
如果是常量,请使用
echo ${12}
自从
echo $12
并不意味着相同!
${12}
和$12
有什么区别? - HelloGoodbye如果您想要获取特定的第n个字段或者最后一个字段,最简单的方法是通过以下方式:
#!/usr/bin/sh
echo ${@:${#}}
输出
sh 5.1$ sh nth_field.sh 1 23 1000 103399
103399
@
(和*
)是“特殊参数”,因为它们不是有效的数组名称?${@}
确实是指定了编号的参数,但是@
不是一个数组,也没有实现支持将其解析为数组,而例如"${unsetvariable}
"将产生空输出,因为它是一个有效的数组/变量名称,只是还没有设置(这些异常在bash的源代码中被特别处理,我想)。我试图在man bash
中找到更好的原因,但是扫描@让我失去了耐心。;P - Victor Zamanian