【问题标题】:Check a command line option is specified ( if '-j' in $@ )检查是否指定了命令行选项(如果 $@ 中的“-j”)
【发布时间】:2015-04-27 00:35:35
【问题描述】:

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

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

如果 bash 像 python,我可以做

if '-j' in $@; then
  my_prog "$@"
else
  my_prog "$@" -j 10
fi

显然不是。

如何在 bash 中安全而优雅地做到这一点?

谢谢!

【问题讨论】:

标签: bash shell command-line arguments


【解决方案1】:

一个简单的组合是:

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

【讨论】:

    【解决方案2】:

    另一种方式,类似于其他人的解决方案,也考虑到 arg 中可能有多个选项,例如-hijk,那么 -j 就不会存在了,但是 j 还是用的:

    #!/bin/bash
    
    if $* | grep -o "j"
    then
        joption=true
    else
        joption=false
    fi
    

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

    【讨论】:

      猜你喜欢
      • 2020-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 2012-09-09
      • 1970-01-01
      • 2019-03-11
      相关资源
      最近更新 更多