-1

我正在编写一个输入参数的 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)不起作用。

4

1 回答 1

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
于 2013-10-17T13:31:55.250 回答