0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シェルスクリプト: パラメータ展開と文字列操作

Last updated at Posted at 2025-12-11

はじめに

シェルスクリプトで文字列操作を行う際、sedawk といった外部コマンドを多用するケースがあると思います。
単純な置換や切り出しであれば、シェルの標準機能である パラメータ展開 (Parameter Expansion) を使用する方が効率的です。

今回は、BashやZshなど多くのシェルで共通して使える、便利な文字列操作テクニックについて解説します。

1. 基本的な文字列操作

文字列の切り出し (Substring)

変数の特定の位置から文字を取り出すことができます。

str="The quick brown fox jumps over the lazy dog"

# 10文字目から5文字切り出す
echo "${str:10:5}"
# -> brown

# 後ろから4文字切り出す (スペースが必要、または括弧で囲む)
echo "${str: -4}"
# -> dog

文字列置換 (Replacement)

変数の内容をパターンマッチで置換することができます。

path="/home/user/project/src/main.c"

# 最初に見つかった "user" を "admin" に置換
echo "${path/user/admin}"
# -> /home/admin/project/src/main.c

# 全ての "/" を "_" に置換 (グローバル置換)
echo "${path//\//_}"
# -> _home_user_project_src_main.c

# 行頭の "/" のみ削除
echo "${path/#\//}"
# -> home/user/project/src/main.c

# 行末の ".c" を ".o" に置換
echo "${path/%.c/.o}"
# -> /home/user/project/src/main.o

これらは全てシェル内部で処理されるため、外部コマンドを呼び出すよりも高速に動作します。

2. デフォルト値とエラーハンドリング

変数が未定義(または空)の場合の挙動を制御する機能は、堅牢なスクリプトを書く上で非常に重要です。

デフォルト値の使用 :-

変数が未定義または空の場合に、指定したデフォルト値を使用します。

# NAME が設定されていなければ "Guest" を表示
echo "Hello, ${NAME:-Guest}"

デフォルト値の代入 :=

変数が未定義または空の場合に、デフォルト値をその変数に代入します。

# CONFIG_PATH が未定義なら "/etc/config" を代入して使用
file_path="${CONFIG_PATH:=/etc/config}"

エラー終了 :?

変数が未定義または空の場合に、エラーメッセージを表示してスクリプトを終了させます。
必須変数のチェックに便利です。

# TARGET_DIR が未定義ならエラー終了
: "${TARGET_DIR:?Error: Target directory is not set}"

3. 配列操作

配列の扱いはシェルによって多少異なりますが、基本的なインデックス配列は以下のように扱えます。

# 配列の宣言
fruits=("apple" "banana" "cherry")

# 要素へのアクセス (Bash/Zsh共通)
echo "${fruits[1]}"
# -> banana (※Zshはデフォルトで1始まりですが、Bash互換モードや設定によります。Bashは0始まりです)

# 全要素の表示
echo "${fruits[@]}"
# -> apple banana cherry

ZshとBashでは配列のインデックス番号の開始位置(0か1か)が異なる場合があります。
移植性を考慮する場合は、配列のインデックスに依存しない書き方(for item in "${array[@]}" など)の方がいいようです。


次回

次回は 「プロセス制御とシグナルハンドリング」 について解説します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?