setコマンド
シェルの設定を確認、変更する
options
-o
コマンド失敗時にスクリプトを終了
未定義変数使用を禁止
-x
実行したコマンドを出力する
etc.
キモいデザインだなmrsekut.icon
GPT-4o.iconその違和感はシェルの歴史的経緯によるところが大きいです。整理するとこんな感じです👇
set -o と短縮オプションの関係
「正式名」と「短縮形」があるものがある
例えば:
errexit ↔ -e
nounset ↔ -u
noglob ↔ -f
ignoreeof ↔ (短縮形なし)
つまり set -o errexit と set -e は完全に同じ意味。挙動に違いはありません。
なぜ一貫性がないのか?(なぜ短縮形がないものがあるのか)
元々の Bourne shell (/bin/sh) では -e, -u, -f など 短いオプションだけが用意されていました。
後から「長い名前のほうが可読性が高い」ということで set -o <name> 形式が追加されました
ただし「すべてに短縮形を作る」ことはされなかったため、pipefail のように 長い名前しかないオプションも残っている、という状態になっています