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

Bash 检查是否指定了命令行选项(如果';-j';在$@中),bash,shell,command-line,arguments,Bash,Shell,Command Line,Arguments,我正在为一个程序编写一个shell包装器。包装器将把命令行选项传递给程序。如果未指定,它还将提供(某些)选项 问题是:我如何检查一个选项,比如-j,是否在参数列表中 如果bash喜欢python,我可以 if '-j' in $@; then my_prog "$@" else my_prog "$@" -j 10 fi 显然不是 我如何在bash中安全优雅地完成它 谢谢 一个简单的难题是: #!/bin/bash if [[ " $* " == *" -j "* ]] then

我正在为一个程序编写一个shell包装器。包装器将把命令行选项传递给程序。如果未指定,它还将提供(某些)选项

问题是:我如何检查一个选项,比如-j,是否在参数列表中

如果bash喜欢python,我可以

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

我如何在bash中安全优雅地完成它

谢谢

一个简单的难题是:

#!/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

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

#!/bin/bash

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

请记住,此解决方案要求没有其他参数包含字母“j”…:-)

你可以看看这个问题和我的答案: