$ bash file.sh expected_arg -f optional_arg
$1
を使用してアドレス指定する投稿を見たことがあります 最初の議論をつかむために
フラグ引数を解析するためにgetoptsを使用してアドレス指定する投稿。両方に対応する投稿は見たことがありません。
現在、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
として処理されます。 、それは私が望んでいることではありません。 expected_argを取得する必要があります
必要な制約:
- さまざまな数のフラグを許可する必要があります(まったくないものからいくつかのものまで)。したがって、expected_argの位置は異なります
- expected_argは必須です
- expected_argを解析するために別のフラグを使用する必要はありません(たとえば、
$ bash test.sh -f file -d blah
のようなことは避けたいです。 )
これらの制約をどのように満たすことができますか?
承認された回答:
どうでも。私はこの投稿を見つけました:オプション以外の引数の後にgetoptsを使用してオプションを解析する
これは基本的に、shift
を配置するだけで問題を解決できると言っています dirname =$1の後
これにより、引数を次のように入力できます
$ bash file.sh expected_arg -f optional_arg