パラメータが-で始まる場合にパラメータを送信する方法

パラメータが-で始まる場合にパラメータを送信する方法

「-」で始まらないパラメータに達するまで、「-」で始まるすべてのパラメータを削除する必要があるbash関数があるとします。

gmx(){

  local options=( );

  while [ "${1:0:1}" == "-"  ]; do
    options+=("${1}")
    shift 1;
  done

  echo "first legit arg: $1"
  "$@" # omg will be executed here, like `omg --rolo`
}

gmx -a -f -c omg --rolo

これはうまくいくようですが、これが常に「omg」を最初の「法的」パラメータとして置くための良い一般的な解決策であると思います。失敗する可能性がある極端なケースはありますか?

つまり、-a、-f、-cはすべてgmxのパラメータです。そしてomgそれに続くすべては子プロセスで実行されます。

ベストアンサー1

正式で最善の方法は、getopts組み込み関数を使用してコマンドラインオプションを解析しないことです。

詳しくはマニュアルページをご覧ください。

注意事項が重要な場合があります。bash長いオプションはサポートされていません。

長いオプションを処理するためにスクリプトを好む場合は、それksh93をサポートする2つのシェルがあります。bosh両方のシェルは、getopt(3)Solarisのlibc関数が長いオプションをサポートしているかのように長いオプションをサポートします。 boshのマニュアルページ(現在の43ページから始まる)を参照してください。

http://schilytools.sourceforge.net/man/man1/bosh.1.html

getopts "f:(file)(input-file)o:(output-file)" OPT

-fたとえば、引数を使用し、そのオプションに長いオプションの別名と、そのオプションの--file2番目の別名を持つオプションをサポートします。--input-file

ksh93もこれをサポートしますが、ksh93のマニュアルページには文書化されていません。

おすすめ記事