如何在bash中获得第n个位置参数?
Posted
技术标签:
【中文标题】如何在bash中获得第n个位置参数?【英文标题】:How to get the nth positional argument in bash? 【发布时间】:2010-12-02 15:20:44 【问题描述】:如何在 Bash 中获取n
th 位置参数,其中n
是可变的?
【问题讨论】:
【参考方案1】:使用 Bash 的间接功能:
#!/bin/bash
n=3
echo $!n
运行该文件:
$ ./ind apple banana cantaloupe dates
生产:
cantaloupe
编辑:
你也可以做数组切片:
echo $@:$n:1
但不是数组下标:
echo $@[n] # WON'T WORK
【讨论】:
@AlexanderOleynikov 它会导致“错误替换”错误;我假设因为@
(和*
)是“特殊参数”并且因为它们不是有效的数组名称? $@
确实 指的是编号参数,但 @
不是一个数组,并且没有实现支持来解析它,而例如"$unsetvariable
" 会产生空输出,因为它是一个有效的数组/变量名,只是尚未设置(我猜这些异常在 bash 的源代码中特别处理)。我试图在man bash
中找到更好的理由,但扫描@'s 让我失去了耐心。 ;P
在 zsh 中,最后一个选项有效(因为为什么不行)。【参考方案2】:
如果N
保存在变量中,使用
eval echo \$$N
如果是经常使用
echo $12
因为
echo $12
意思不一样!
【讨论】:
$12
和$12
有什么区别?
嗨@HelloGoodbye,$12
表示$1
和字符2
。 $12
表示第 12 个参数。【参考方案3】:
阅读
Handling positional parameters
和
Parameter expansion
$0:第一个位置参数
$1 ... $9:参数列表元素从 1 到 9
【讨论】:
这个答案没有解决 OP 的原始问题。他特别问如何通过存储在变量中的索引来获取参数。以上是关于如何在bash中获得第n个位置参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 2 个位置参数在 argparse 上打印帮助界面?