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

Posted

技术标签:

【中文标题】如何在bash中获得第n个位置参数?【英文标题】:How to get the nth positional argument in bash? 【发布时间】:2010-12-02 15:20:44 【问题描述】:

如何在 Bash 中获取nth 位置参数,其中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个位置参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何从第 N 个位置获取批处理文件参数?

如何使用 2 个位置参数在 argparse 上打印帮助界面?

fmt 只替换字符串中的一个位置参数几个位置参数

位置变量与预定义变量

如何匹配第 n 个位置的字符(Cloudera Impala SQL)

在bash中的函数中设置位置参数