Bashで位置パラメータを設定する方法

Bashで位置パラメータを設定する方法

~からhttps://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin

set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]

...

--このオプションの後に引数がない場合、位置引数は設定解除されます。それ以外の場合は、位置パラメータの一部が「-」で始まっても位置パラメータがパラメータに設定されます。

-オプションの終わりを通知し、残りのすべての引数が位置引数に割り当てられるようにします。 -xおよび-vオプションはオフになります。パラメータがない場合、位置パラメータは変更されずにそのまま残ります。

「-」の代わりに「+」を使用すると、これらのオプションはオフになります。これらのオプションは、シェルを呼び出すときにも使用できます。現在のオプションセットは$-にあります。

残りのN個のパラメータは、位置パラメータとして$ 1、$ 2、... $ Nに順番に割り当てられます。特殊パラメータ#はNに設定されます。

位置パラメータを設定する方法は3つあります。

set -- argument
set - argument
set argument

それらの違いは何ですか?

ありがとうございます。

答え1

--との違いは、使用時とオプションも設定されていないこと-です。--x-v

$ set -vx
$ echo "$-"
himvxBHs                # The options -v and -x are set.

$ set - a b c
$ echo "$-  <>  $@"     # The -x and -v options are turned off.
himBHs  <>  a b c

これはシェルがこれを可能にする一般的な方法ですが、-POSIXではこのオプションは「指定されていません」です。

最初の引数が「-」の場合、結果は指定されません。

set --一般と一般の違いはset非常に一般的に使用されます。
このマニュアルではこれを非常に明確に説明しています。

- このオプションの後に引数がない場合、位置引数は設定されません。それ以外の場合、位置引数の一部が-で始まっても、位置引数はargsに設定されます。

--は「オプションの終わり」を意味し、次のパラメータは-で始まっても位置パラメータとして使用されます。

$ set -- -a -b -e -f arg1
$ echo "$@"
-a -b -e -f arg1

代わりに:

$ set -a -b -e -f arg1
$ echo "$@"
arg1

しかし、一部のシェルオプションも変更されました。

- または - を使用しない場合は、オプション名に拡張された変数を使用してオプションを設定できます(引用符でも)。

$ echo "$-"
himBHs

$ a='-f'
$ set "$a"

$ echo "$-"
fhimBHs

答え2

set argumentとの違いは、set -- argument他の多くのコマンドに共通です。

時々で始まる引数がありますが、コマンドは実際にはコマンドオプションだ -と思うので(で始まるので)、それは実際には使用できません。-

実際には--次のようになります。 「十分です!始まっても、次の内容はすべて-実引数です」

一般に(マンページによると)loneはこの目的-と同じです--

はい

以下を使用できます。

set -- -a -b file1 file2  

$1、、、$2および$3をそれぞれ、および$4に設定します。保存されていません - これがない場合は単なる表示であり、コマンド自体の可能なオプションとして解釈されます。-a-bfile1file2---a-bset

関連情報