set
どちらshopt
もさまざまなオプションを制御するシェル組み込みコマンドです。どのオプションがどのコマンドで設定されるか、どのオプションが設定/解除されるか(set -o/+o
、shopt -s/-u
)忘れてしまうことが多いです。同じタスクを実行しているように見える(そしてそのタスクを実行するためのパラメータが異なる)、2つの異なるコマンドがあるのはなぜですか?どのオプションがどのコマンドで使用されるかを覚える簡単な方法/ニーモニックはありますか?
答え1
私が知る限り、これらのset -o
オプションは他のBourneスタイルのシェル(主にksh)から継承されたオプションであり、これらのshopt
オプションはbashにのみ適用されます。私が知る限り、論理はありません。
答え2
違いは、bashで使用される環境変数が変更されたことです。コマンドを使用set
して結果をに設定します。コマンド$SHELLOPTS
を使用shopt
して結果をに設定します$BASHOPTS
。
答え3
set
POSIX 7は次のとおりです。set - オプションと位置パラメータの設定または設定解除pubs.opengroup.org |
一緒にいるかもしれない@Gillesが言及した歴史。
答え4
本「Bashを使用したLinuxシェルスクリプト」、63ページ:
歴史的に、この
set
コマンドはオプションをオンまたはオフにするために使用されました。オプションの数が多いほど、set
オプションは単一の文字コードで表示されるため、使用がますます困難になります。したがって、Bashはshopt
(住宅オプション) コマンドは、文字の代わりに名前でオプションのオンとオフを切り替えます。一部のオプションは文字でのみ設定できます。その他はshopt
コマンドでのみ使用できます。これにより、特定のオプションを見つけて設定することが混乱しています。