いくつかのパラメータを解析する一般的なスクリプト()がありますcommon.sh
。他のスクリプトはimport itを使用しますsource common.sh
。パラメータの解析に以下のコードを複数回使用できるように$@
合計をリセットする方法はありますか?$#
パラメータ解析が実行された後に使用できるように、最初に元のスクリプトパラメータを保存します。
readonly script_args=("${@}")
ただし、これは引数のみを保存するため、パラメータshift
分析を実行するために複数回使用することはできません。
パラメータ分析:
while [[ $# -gt 0 ]]; do
case "$1" in
--command=*)
command="${1#*=}"
;;
--project=*)
project="${1#*=}"
;;
--workspace=*)
workspace="${1#*=}"
;;
--account=*)
account="${1#*=}"
;;
--debug)
debug="true"
;;
"")
log_debug "Empty argument"
;;
*)
log_error "Invalid argument: ${1}"
exit 1
;;
esac
shift
done
答え1
Bourneなどのシェルでは、シェルオプションの設定に加えて、set
位置パラメータの設定にも使用できます。
set -- "${script_args[@]}"
--
必要:
$script_args
最初の要素がorで始まる場合は、オプションと見なされないようにオプションの終わりが表示されます。-
+
- この問題を解決するために引数がに渡されない場合は、
set
位置引数を空のリストに設定する代わりに、変数(および一部のシェルの関数)のリストを印刷します。
"${script_args[@]}"
、どちら〜しなければならない参照されるのは、"$@"
Bourne シェルの拡張を配列のすべての要素に拡張する Korn シェル構文です。この構文もサポートしていzsh
ます。bash
yash
これらすべてから、yash
あなたも使用することができます
set - "${script_args[@]}"
zshでは、次のものも使用できます。
argv=( "$script_args[@]" )
では、yash
以下を使用することもできます。
set -- "$script_args"
等価物rc
または派生物は次のとおりです。
* = $script_args
存在するfish
:
set argv $script_args
in csh
/ tcsh
(1970年代後半の配列をサポートする最初のシェル)
set argv = ($script_args:q)
¹Bourneシェルは--
1981年にSysIIIまでこの機能をサポートしていませんでしたが、常にサポートされました-
。これは実際にはオプションの区切り文字ではなく、オプションが最初の引数(forなど)sh
だけを考慮するだけです。これは空の-
オプションのリストです。 。