通过变量访问位置参数

Posted

技术标签:

【中文标题】通过变量访问位置参数【英文标题】:accessing a positional parameter through a variable [duplicate] 【发布时间】:2016-12-06 03:58:03 【问题描述】:

我正在尝试使用变量访问位置参数。

即如果我定义一个变量为 1,我想访问第一个位置参数,如果我定义它为 2,我想访问第二个位置参数。

示例: bash script.bash arg1 arg2 arg3

 var=2
 echo $var // will only echo no. 2
 ??? // insert your command to echo the 2nd positional parameter (arg2)

这个可以吗?

【问题讨论】:

是的!谢谢。但只是为了让其他读者更容易 - 你可以这样访问它:$!var,即 ehco $!var 将回显 arg2 但是该解决方案会使脚本的可移植性降低,请参阅我的回答后面的 cmets。 【参考方案1】:

[[ "$var" -eq "1" ]] && echo "$1" #for positional parameter 1

等等,或者你可以像下面这样:

#!/bin/sh
var=2
eval echo "\$$var" # This will display the second positional parameter an so on

编辑

如果我真的需要在 echo 之外访问,我该如何使用它。为了 例如“如果 [ -f \$$var ]”

你指出的最好的方法:

var=2 
eval temp="\$$var"
if [ -f "$temp" ] # Do double quote
then
#do something
fi

【讨论】:

呃,这在一般情况下不是很可扩展。 Bash 有$!var 以避免使用 eval 我添加了 bash 标签,因为 OP 在他们的示例中有这个标签,但我有点犹豫。 好的,我明白了——你提前声明了变量。 IE。 var=2 评估 var2="\$$var" . 很好,感谢关于可移植性的说明。

以上是关于通过变量访问位置参数的主要内容,如果未能解决你的问题,请参考以下文章

:变量访问 内部变量(内建变量位置参数其他特殊参数)

js 默认的参数可变的参数变量作用域

PIC和PIE

Shell编程Shell中Bash变量-位置参数变量

Shell编程Shell中Bash变量-位置参数变量

Kettle位置参数(Argument)命名参数(Parameter)变量(Variable)