$ 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をつかむ必要があります
必要な制約:
$ bash test.sh -f file -d blah
のようなことは避けたいです)どうすればこれらの制約を満たすことができますか?
気にしないで。私はこの投稿を見つけました: オプション以外の引数の後にgetoptsを使用してオプションを解析する
これは基本的に、dirname = $ 1の後にshift
を配置するだけで問題を解決できると言っています
これにより、引数を次のように入力できます
$ bash file.sh expected_arg -f optional_arg