检查命令行选项是否已指定(如果' -j'在$ @中)

时间:2015-02-25 05:32:04

标签: bash shell command-line arguments

我正在为程序编写shell包装器。包装器将命令行选项传递给程序。如果没有指定,它也会提供(某些)选项。

问题是:如何检查参数列表中是否有(-j)选项?

如果像python一样bash,我可以做

if '-j' in $@; then
  my_prog "$@"
else
  my_prog "$@" -j 10
fi
显然不是。

我如何安全优雅地在bash中完成这项工作?

谢谢!

2 个答案:

答案 0 :(得分:1)

简单的kludge是:

#!/bin/bash
if [[ " $* " == *" -j "* ]]
then
  echo "It contains -j"
fi

它将所有参数连接成一个字符串,然后检查它是否包含“-j”。

您还可以拥有更强大的版本,还可以进行更多工作:

inarray() {
  local element="$1"
  local f
  shift
  for f
  do 
    [[ "$f" == "$element" ]] && return 0
  done
  return 1
}

if inarray "-j" "$@"
then
  echo "It contains -j"
fi

答案 1 :(得分:1)

另一种方式,类似于其他人的解决方案,也考虑到arg中可能存在多个选项,例如-hijk,然后-j将不存在,但仍然使用j:

#!/bin/bash

if $* | grep -o "j"
then
    joption=true
else
    joption=false
fi

明白这个解决方案要求没有其他论点有字母" j"在... :-)