🐧 Linux 総合学習プラットフォーム
シェルスクリプト ・ 入門〜中級

変数展開でしなやかに書く

変数はそのまま呼ぶだけでなく、既定値やパターン切り出しを一手で書ける。${VAR:-既定} は未設定なら既定値、${file%.txt} は末尾を削る、${#VAR} は文字数。定型処理が短く安全になる。

変数は $VAR で取り出すだけと思われがちだが、${ } を使うと「加工しながら取り出す」ことができる。外部コマンドを呼ばずに済むので速く、スクリプトが短く読みやすくなる。

🛟 既定値でこける前に守る

${VAR:-既定値} は、VAR が未設定または空のとき、代わりに既定値を返す。入力漏れでスクリプトが崩れるのを防ぐ、いちばん使う形だ。

name=${1:-guest} … 第1引数が無ければ guest を使う。

✂ 前後を切り出す

${file%.txt} は末尾の .txt を削り、${path##*/} は最後の / までを削ってファイル名を取り出す。# は先頭側、% は末尾側、と覚える。

f=report.tar.gz → ${f%.gz} は report.tar、${f%%.*} は report。
💡
ポイント# は前(head)、% は後ろ(tail)を削る。1個は最短一致、2個(## / %%)は最長一致。

📏 長さと置換

${#VAR} は文字数を返し、${VAR/old/new} は最初の old を new に置き換える。ちょっとした整形なら sed を呼ばずここで済む。

コツ変数は基本的に "${VAR}" とダブルクオートで囲む。空白や記号が入っても1つの値として安全に扱える。

この項目に出てくる用語

変数展開へんすうてんかい
${...} でデータを加工しながら取り出す仕組み。既定値・部分削除・長さ取得ができる。

関連コマンド

echo

▶ 学習アプリでこの続きを学ぶ・演習する