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