正確にどんな機能ですか?」キーワードset
Bashシェルにコマンド割り当てオプションはありますか?
オプション:
set -o keyword
または
set -k
簡単な例だけで理解するのに十分です。
答え1
通常、コマンドの環境変数を挿入するには、コマンドの前の名前に値を割り当てます。
VARIABLE=value bash -c 'echo "$1 $VARIABLE"' bash hello
これはbash -c 'echo "$VARIABLE"' bash hello
コマンド環境で実行され、文字列に設定されますVARIABLE
。value
この場合、コマンドはインラインスクリプトの最初のコマンドライン引数と環境変数から印刷hello value
します。hello
value
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 -o
「set +o
キーワード」の代わりに使用するすべてのオプション名を提供します。
set -k
それ自体は環境割り当て構文を変更するオプションであり、他の回答で説明されています。