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

おすすめ記事