引数なしのset
コマンドは何をしますか?
ご覧のように、env
コマンドと同じように、環境変数をアルファベット順に出力します。さらに、次のようないくつかの異なる情報(変数?関数?)を出力します。
__git_printf_supports_v=yes
__grub_script_check_program=grub-script-check
...
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
quote_readline ()
{
local quoted;
_quote_readline_by_ref "$1" ret;
printf %s "$ret"
}
それは何で、どこから来たのですか?
set
コマンドに関する情報が引数なしで見つかりません。実際、Linuxディストリビューションにはman
のset
ページがありません。
set
は、環境変数だけでなくすべてのシェル変数と、リストの最後に表示されているシェル関数も表示するシェル組み込みです。
変数は、行が実行またはソースされるときに変数を設定できる構文で表示されます。
bash
から マニュアルページ :
オプションまたは引数が指定されていない場合、setはすべてのシェル変数と関数の名前と値を、現在のロケールに従ってソートされ、設定またはリセットの入力として再利用できる形式で表示します現在設定されている変数
異なるシェルでは、動作は必ずしも同じではありません。たとえば、ksh
set
はシェル関数を表示しません。
set
はシェルの組み込み で、シェルオプションと位置パラメータを設定および設定解除するために使用されます。
引数がない場合、set
は、現在の locale でソートされたすべてのシェル変数(環境変数と現在のセッションの変数の両方)を出力します。
bashのドキュメント も読むことができます。
いくつかの注意点があります。
_set "$var"
_はvar
値を_$1
_に割り当てます。 _$var
_が_-
_または_+
_で始まる場合、_$var
_の内容はシェルオプションのシーケンスとして扱われます。 _$var
_に無効なオプションが含まれている場合、ほとんどのPOSIXシェルがエラーを出力します。 yash
、zsh
エミュレーションのsh
およびksh
は、エラーを出力するだけでなく、有効なオプションを設定します。 yash
は最初の無効なオプションでオプションの設定を停止しますが、zsh
はすべてのオプションを割り当てます。 yash
内:
_var=-fxd; set "$var"
_
f
およびx
は_$-
_に存在しますが、
_var=fdx; set "$var"
_
_$-
_にはf
のみが存在します。どちらの場合でも、f
およびx
は__$-
_に存在し、zsh
はsh
およびksh
エミュレーションに存在します。
そのような状況からユーザーを保護するには、_--
_または_-
_で始まる場合でも、最初の引数として_+
_を渡して位置パラメータを設定できます。
_var=-fdx; set -- "$var"
_
内容に関係なく_$var
_を_$1
_に割り当てます。
それ以上引数を指定しない_set --
_は、すべての定位置パラメーターの設定を解除します。
最初の引数が_-
_の場合、動作は指定されていません。すべての既知のPOSIXシェルは、x
およびv
オプション(posh
を除く)の設定を解除し、_-
_の後のすべてを位置パラメータに割り当てます。
_set -xv - -f
_
_-f
_を_$1
_に割り当てます。 _set -
_も定位置パラメーターの設定を解除しませんでした。 Schily osh もそのように動作します。 Heirloom sh はv
およびx
オプションの設定を解除しません。
POSIXシェルの唯一の例外はyash
で、これは_-
_を最初の定位置パラメーターとして扱います。
_$ yash -c 'set -xv - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
+ printf %s\n - -f
-
-f
+ printf %s\n cvx
cvx
_
Schily sh _-
_が引数に存在する場合、何もしません:
_$ schily-sh -c 'set -v - -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
<blank line>
s
$ schily-sh -c 'set -v -- -f; printf "%s\n" "$@"; printf "%s\n" "$-"'
-f
vs
_
set
には出力とwhich set
は、使用しているシェルの一部であることがわかっているものは何も返しません。おそらくbashです。
man bash は何度も言及していますが、 オンラインドキュメント でリンクする方が簡単です。
このビルトインは非常に複雑なので、独自のセクションに値します。 setを使用すると、シェルオプションの値を変更して位置パラメータを設定したり、シェル変数の名前と値を表示したりできます。
セットの呼び出し仕様は次のとおりです。
set [--abefhkmnptuvxBCEHPT] [-o option-name] [argument …]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [argument …]
したがって、コマンドラインで人にそれを見つけたい場合は、
/set.*abef
Bashシェル内で作業している場合は、help set
と入力します。
印刷されたヘルプの最後に、次をお読みください:
ARGが指定されていない場合、すべてのシェル変数が出力されます。
したがって、引数なしset
は、シェルが認識しているすべての変数を出力します。