bash --- 構文解析フラグと予想(オプションではない)引数

bash --- 構文解析フラグと予想(オプションではない)引数
$ bash file.sh expected_arg -f optional_arg

$1以下を使用して、最初のパラメータを取得する方法が記載されたいくつかの記事を見ました。

フラグパラメータを解析するためにgetoptsを使用する方法に関する投稿。まだこの2つの問題に対処する記事を見たことがありません。

現在をexpected_arg訪問しています$1

私は-fその旗をまったく余裕がありません。私のテストスクリプトにも次のものがあります。

#!/bin/bash

dirname=$1

[[ -z  $dirname  ]] && echo "Project name required as an argument." && return

# get flags
verbose='false'
aflag='false'
bflag='false'
files='false'
while getopts 'abf:v' flag; do
  case "${flag}" in
    a) aflag='true' ;;
    b) bflag='true' ;;
    f) files="${OPTARG}" ;;
    v) verbose='true' ;;
    *) error "Unexpected option ${flag}" ;;
  esac
done

echo "$files"

echo "$HOME/Desktop/$dirname"

exit

端末に以下が表示されます。

Jills-MBP:~ jillr$ bash test.sh blah -f file
false
/Users/jillr/Desktop/blah

〜しない限り次のようにパラメータの順序を切り替えます。

bash file.sh -f optional_arg expected_arg

ターミナル出力:

Jills-MBP:~ jillr$ bash test.sh -f file blah
file
/Users/jillr/Desktop/-f

したがって、当然 -f は として扱われますが、$1これは私が望むものではありません。予想されるパラメータを取得する必要があります。

必須制約:

  • さまざまな数のフラグを許可する必要があります(なしから複数まで)。したがって、予想_argの位置が異なります。
  • Expected_argが必要です。
  • 予想されるパラメータを解析するために他のフラグを使用することを避けたいです(たとえば、このような作業を避けたい$ bash test.sh -f file -d blah)。

これらの制限をどのように満たすことができますか?

ベストアンサー1

それは問題ではありません。この投稿を見つけました。オプション以外のパラメータの後のオプションを解析するには、getoptsを使用してください。

shiftこれは、デフォルトでdirname = $ 1の後に配置すると問題を解決できることを意味します。

これにより、入力パラメータが許可されます。

$ bash file.sh expected_arg -f optional_arg

おすすめ記事