概要
シェルオプションを変更し、位置引数を設定します。set -e、set -u、set -xなどはスクリプト品質と安全性に直結します。
基本構文
set [オプション] [引数 ...]
set -- [引数 ...]詳細解説
setは、シェル全体の挙動を変更する重要な組み込みです。エラー時に終了する、未定義変数をエラーにする、実行コマンドを表示する、といった動作を有効化できるほか、位置引数をまとめて設定する用途にも使います。
実務では、set -e、set -u、set -x、set -o pipefailのような安全性や調査性に関わる設定がよく議論されます。ただし、これらは万能ではなく、条件式やパイプラインと組み合わせた時に思わぬ動作を招くことがあります。
特にset -xは、実行中の変数展開結果を表示するため、秘密情報をログへ出してしまう危険があります。便利な反面、使い所を選ぶ必要があります。
このコマンドを使う場面
シェルスクリプトの安全性を高めたい時、位置引数を作り直したい時、デバッグのため実行過程を見たい時に使います。
まず安全に試す方法
1. set -- alpha beta gamma
2. printf "%sn" "$1" "$2" "$3"
3. set -u
4. : "$HOME"
5. set +u
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
set -- a b cを実行し、$1から$3を表示して確認します。
-
set -uを有効にし、定義済み変数と未定義変数で挙動差を観察します。
資格試験との関連
-
LinuC レベル1
範囲: 1.06 シェルスクリプト根拠: officialLinuCレベル1では、シェルスクリプトの作成、条件判定、入力処理が問われます。setはその基礎部品として重要です。
-
LPIC-1
範囲: 105.2 簡単なスクリプトをカスタマイズする根拠: officialLPIC-1では、単純なシェルスクリプトの分岐と入力処理が出題対象です。setはその基本構成要素です。
-
共通基礎
範囲: Linuxコマンド基礎根拠: editorial試験横断で、setはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。
実行結果サンプル
-
set -- alpha beta printf "%sn" "$1" "$2"alpha beta -
set -u printf "%sn" "$HOME" set +u/home/user
戻り値コード
- 0 設定変更に成功しました。
- >0 不正なオプションなどのエラーが起きました。
使用例
set -uset -xset -- one two threeset +x
よくあるエラー
-
set -eを入れたら予想外の場所でスクリプトが止まった 原因: set -eは条件式やパイプラインなどで直感と異なる場面があります。対処: 失敗許容箇所を明確にし、挙動を小さな例で確認してから採用します。
-
set -xで認証情報がログに出た 原因: 変数展開結果まで表示されたためです。対処: 秘密情報を扱う区間ではset +xに戻し、必要最小限だけ有効にします。
導入・互換性情報
POSIXで基本のsetは定義されていますが、詳細なオプションや挙動はシェル差があります。Bashではset -o形式やpipefailなど拡張があります。
- Debian GNU/Linux / 13 / Bash 5.2.37
注意点 / セキュリティリスク
シェル全体の挙動を変えるため影響範囲が大きいコマンドです。特にset -eとset -xは、停止条件や機密情報の露出に関わるため、意味を理解してから使う必要があります。
FAQ
-
Q. set -eは常に入れるべきですか。 A. 一律ではありません。便利ですが、文脈によって思わぬ停止を招くため、意図と検証が必要です。
-
Q. set --は何に使いますか。 A. 現在の位置引数を作り直し、スクリプト内で引数列を再構成したい時に使います。
関連用語
参照リンク
- カテゴリー: Shell And Cli
- シェル依存: Posix Sh
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎