setは、シェルオプションと位置パラメータの設定および設定解除に使用されるシェル組み込みコマンドです。
引数なしsetで、現在のロケールでソートされたすべてのシェル変数(環境変数と現在のセッションの変数の両方)を出力します。
bashのドキュメントも読むことができます。
いくつか注意点があります。
set "$var"にvar値を割り当てます$1。またはで$var始まる場合、コンテンツはシェルオプションのシーケンスとして扱われました。無効なオプションが含まれている場合、ほとんどのPOSIXシェルはエラーを出力します。およびで、エミュレーションはエラーを出力するだけでなく、有効なオプションを設定します。最初の無効なオプションでオプションの設定を停止すると、すべてのオプションが割り当てられます。で:-+$var$varyashzshshkshyashzshyash
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もそのように動作します。家宝は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
シリー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