bashの `set -oキーワード`は何をしますか?

bashの `set -oキーワード`は何をしますか?

正確にどんな機能ですか?」キーワードsetBashシェルにコマンド割り当てオプションはありますか?

オプション:

set -o keyword

または

set -k

簡単な例だけで理解するのに十分です。

答え1

通常、コマンドの環境変数を挿入するには、コマンドの前の名前に値を割り当てます。

VARIABLE=value bash -c 'echo "$1 $VARIABLE"' bash hello

これはbash -c 'echo "$VARIABLE"' bash helloコマンド環境で実行され、文字列に設定されますVARIABLEvalueこの場合、コマンドはインラインスクリプトの最初のコマンドライン引数と環境変数から印刷hello valueします。hellovalue

set -o keyword(またはset -k)in bash(非標準シェルオプション)を使用すると、コマンドラインのどこにでも割り当てることができます。

$ set -k
$ bash -c 'echo "$1 $VARIABLE"' bash hello VARIABLE=value
hello value
$ bash -c 'echo "$1 $VARIABLE"' bash VARIABLE=value hello
hello value
$ bash -c 'echo "$1 $VARIABLE"' VARIABLE=value bash hello
hello value
$ bash -c VARIABLE=value 'echo "$1 $VARIABLE"' bash hello
hello value
$ bash VARIABLE=value -c 'echo "$1 $VARIABLE"' bash hello
hello value

私はこのオプションが「野生で」使用されることを見たことがなく、コマンドが解析される方法を根本的に変更するので、非常に特定の状況でのみほとんど使用されないと仮定します。

答え2

マニュアルから:

-K

代入形式のすべての引数は、コマンド名の前の引数だけでなく、コマンド環境にも配置されます。

いくつかの実験を行った後:

$ bash -c '
    env | grep -e foo -e baz
    for ((i=0; i<=$#; i++)); do echo "$i = ${!i}"; done
' foo=bar baz=qux
0 = foo=bar
1 = baz=qux

var = valパラメーターは一般パラメーターです。

しかし、一緒にset -o keyword

$ set -k
$ bash -c '
    env | grep -e foo -e baz
    for ((i=0; i<=$#; i++)); do echo "$i = ${!i}"; done
' foo=bar baz=qux
foo=bar
baz=qux
0 = bash

var = val引数が検出され、パラメータから削除され、環境に配置されます。

答え3

set -o keyword「keyword」で定義されたバイナリbashオプションの1つを設定できます。 「keyword」を実際のオプション名に変更する必要があります。たとえば、次のようにxtraceに置き換えることができます。

このオプションは、オンまたはオフに2つの値を使用します(トレースオンなどset -o xtrace)。

このオプションをリセットするには、次を使用します。set +o xtrace

すべてのオプション設定リストはキーワードを省略して取得できます。オプション設定リストを表示する代替ビューであるすべてのオプションリストは、set -oset +oキーワード」の代わりに使用するすべてのオプション名を提供します。

set -kそれ自体は環境割り当て構文を変更するオプションであり、他の回答で説明されています。

関連情報