No.014シェル
set
セット・シェルオプション・位置引数設定
シェルオプションを変更し、位置引数を設定します。set -e、set -u、set -xなどはスクリプト品質と安全性に直結します。
答えよく使う形
注意シェル全体の挙動を変えるため影響範囲が大きいコマンドです。
$ set -- alpha beta
printf "%sn" "$1" "$2"
alpha beta
$ set -u
printf "%sn" "$HOME"
set +u
/home/user
$ set -u
練習用の部屋です。何を打っても本物は変わりません。本物の Linux で続ける →
覚える順番の中でLPIC-1・45 駅め / 106
どんなコマンド?
シェルスクリプトの安全性を高めたい時、位置引数を作り直したい時、デバッグのため実行過程を見たい時に使います。
setは、シェル全体の挙動を変更する重要な組み込みです。エラー時に終了する、未定義変数をエラーにする、実行コマンドを表示する、といった動作を有効化できるほか、位置引数をまとめて設定する用途にも使います。
実務では、set -e、set -u、set -x、set -o pipefailのような安全性や調査性に関わる設定がよく議論されます。ただし、これらは万能ではなく、条件式やパイプラインと組み合わせた時に思わぬ動作を招くことがあります。
特にset -xは、実行中の変数展開結果を表示するため、秘密情報をログへ出してしまう危険があります。便利な反面、使い所を選ぶ必要があります。
書き方とオプション
組み立ててみるオプションを押すと、下の1行に足されます。もう一度押すと外れます。
$ set
使用例と実行結果
行を押すとコピーできます。
alpha beta
/home/user
まず安全に試す
: "$HOME"
3分ミッション
手を動かすと覚えやすくなります。できたものに印を付けてください(この端末に残ります)。
0 / 2
つまずいたとき
set -eを入れたら予想外の場所でスクリプトが止まった
原因set -eは条件式やパイプラインなどで直感と異なる場面があります。
こうする失敗許容箇所を明確にし、挙動を小さな例で確認してから採用します。
set -xで認証情報がログに出た
原因変数展開結果まで表示されたためです。
こうする秘密情報を扱う区間ではset +xに戻し、必要最小限だけ有効にします。
終わったときの数(戻り値)
$ echo $?
- 0設定変更に成功しました。
- >0不正なオプションなどのエラーが起きました。
気をつけることと入れ方
シェル全体の挙動を変えるため影響範囲が大きいコマンドです。特にset -eとset -xは、停止条件や機密情報の露出に関わるため、意味を理解してから使う必要があります。
シェル(bash など)に組み込まれたコマンドです。入れるものはありません。
環境による違い
POSIXで基本のsetは定義されていますが、詳細なオプションや挙動はシェル差があります。Bashではset -o形式やpipefailなど拡張があります。
確かめた環境Debian GNU/Linux / 13 / Bash 5.2.372026-04-09 に確認
よくある質問
set -eは常に入れるべきですか。
一律ではありません。便利ですが、文脈によって思わぬ停止を招くため、意図と検証が必要です。
set --は何に使いますか。
現在の位置引数を作り直し、スクリプト内で引数列を再構成したい時に使います。
資格試験では
- LinuC レベル1大事1.06 シェルスクリプトLinuCレベル1では、シェルスクリプトの作成、条件判定、入力処理が問われます。setはその基礎部品として重要です。
- LPIC-1大事105.2 簡単なスクリプトをカスタマイズするLPIC-1では、単純なシェルスクリプトの分岐と入力処理が出題対象です。setはその基本構成要素です。
- 共通基礎大事Linuxコマンド基礎
set を最後まで読みました。
Linux コマンド辞典に戻る101 / 144