使用参数名称中的变量值

时间:2013-10-16 22:54:03

标签: bash

我正在写一个会输入参数的bash脚本,命令看起来像这样:

command -a -b -c file -d -e

我想检测一个特定的参数(-b)及其具体位置($ 1,$ 2,$ 3)

#! /bin/bash
counter=0
while [ counter -lt $# ]
do
    if [ $($counter) == "-b" ]
    then
        found=$counter
    fi
    let counter+=1
done

问题在$($counter)上升。有没有办法使用$counter来调用参数的值?例如,如果counter=2,我想调用参数$2的值。 $($counter)不起作用。

1 个答案:

答案 0 :(得分:2)

您可以在不使用getopts的情况下完成此操作(但仍然建议这样做),方法是重新处理循环。

counter=1
for i in "$@"; do
  if [[ $i == -b ]]; then
      break
  fi
  ((counter+=1))
done

直接迭代参数,而不是迭代参数位置。


bash也允许使用以下语法进行间接参数扩展:

#! /bin/bash
counter=0
while [ counter -lt $# ]
do
    if [ ${!counter} = "-b" ]  # ${!x} uses the value of x as the parameter name
    then
        found=$counter
    fi
    let counter+=1
done