set セット

英語表記set

日本語表記シェルオプション・位置引数設定

正式名称set

危険度注意

What does it mean?

シェルオプションを変更し、位置引数を設定します。set -e、set -u、set -xなどはスクリプト品質と安全性に直結します。

Command Quest

set を今日の道具にする

シェルオプションを変更し、位置引数を設定します。set -e...

$ set [オプション] [引数 ...] set -- [引数 ...]
関連用語8
次のコマンド0
FAQ2
参照4

概要

シェルオプションを変更し、位置引数を設定します。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分ミッション

少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。

  1. set -- a b cを実行し、$1から$3を表示して確認します。

  2. set -uを有効にし、定義済み変数と未定義変数で挙動差を観察します。

資格試験との関連

  • LinuC レベル1
    範囲: 1.06 シェルスクリプト
    根拠: official
    LinuCレベル1では、シェルスクリプトの作成、条件判定、入力処理が問われます。setはその基礎部品として重要です。
  • LPIC-1
    範囲: 105.2 簡単なスクリプトをカスタマイズする
    根拠: official
    LPIC-1では、単純なシェルスクリプトの分岐と入力処理が出題対象です。setはその基本構成要素です。
  • 共通基礎
    範囲: Linuxコマンド基礎
    根拠: editorial
    試験横断で、setはコマンドライン操作、手順読解、トラブルシュートの基礎体力を作る項目です。

オプション

  • -e
    単純コマンドの失敗時にシェルを終了させます。条件式や一部文脈では挙動が直感と異なることがあります。
    set -e
  • -u
    未定義変数の参照をエラーにします。変数名の打ち間違い検出に有効です。
    set -u
  • -x
    実行前のコマンドと展開結果を表示します。
    set -x
  • -- 引数 ...
    位置引数を作り直します。
    set -- a b c

実行結果サンプル

  • set -- alpha beta printf "%sn" "$1" "$2"
    alpha
    beta
  • set -u printf "%sn" "$HOME" set +u
    /home/user

戻り値コード

  • 0 設定変更に成功しました。
  • >0 不正なオプションなどのエラーが起きました。

使用例

  • set -u
  • set -x
  • set -- one two three
  • set +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. 現在の位置引数を作り直し、スクリプト内で引数列を再構成したい時に使います。

関連用語

  • シェル
  • Bash
  • Zsh
  • Fish
  • POSIXシェル
  • 環境変数
  • shell function
  • Bash scripting

参照リンク

関連記事