Lから始まるLinux

3章20話
パラメータ展開(基本)
3章21話 パラメータ展開(拡張)
もくじ
3章22話
シェル関数
パラメータ展開(拡張)
若木 みどり
前回はパラメータ展開を学んだよ!
若木 しげる
今回は bash で拡張された パラメータ展開を紹介するね! Linux の標準的なシェルは bash なので ほとんど問題は起こらないだろうけど 他のシェルで使えないかもしれないことは 覚えておこう!
${#変数名}
若木 しげる
最初は「値の長さ」だよ
${#変数名}
若木 しげる
このように書くと変数の値の文字列長を返すんだ簡単なので試してみよう!
MESSAGE=123456
echo "${#MESSAGE}"
若木 みどり
へぇ…
6
若木 みどり
6文字だから6 なんだねwc の代わりに使えそう!
${変数名:開始位置:長さ}
若木 しげる
今度は「値の部分展開」だよ
${変数名:開始位置:長さ}
${変数名:開始位置}
若木 しげる
これは変数の値の一部分を抜き出すんだ開始位置は 0 から数え始めるから気をつけてね!例えば 4「5文字目」となるよ!
若木 しげる
長さ の指定がなければ開始位置から末尾までを抜き出すよ
若木 しげる
負の長さを指定した場合は開始位置から「末尾から指定された文字数分まで」を抜き出すんだ
若木 みどり
言葉で言うと複雑な感じがするね
若木 しげる
例を見てみよう!
VALUE=123456789
コマンド出力説明
echo "${VALUE:5}"67896文字目以降を抜き出す
echo "${VALUE:3:3}"4564文字目以降の3文字を抜き出す
echo "${VALUE:6:-1}"787文字目以降末尾から1文字目までを抜き出す
若木 みどり
これは便利だね!cut の代わりに使えそう!
${変数名#文字列}
若木 しげる
次は「値の前方削除」だよ
${変数名#文字列}
${変数名##文字列}
若木 しげる
これは変数の値の先頭から文字列 にマッチする部分を削除した値を表示するよワイルドカードの指定も可能なんだ
若木 みどり
# の個数で2パターンあるんだね
若木 しげる
# だと最短一致パターン## だと最長一致パターンを削除してくれるよ
若木 しげる
これも例を見てみよう!
VALUE="/home/midori/diary.txt"
コマンド出力
echo "${VALUE#/home}"/midori/diary.txt
echo "${VALUE#/*/}"midori/diary.txt
echo "${VALUE#*midori}"/diary.txt
echo "${VALUE#*.}"txt
echo "${VALUE##*/}"diary.txt
若木 みどり
${VALUE##*/}basename の代わりに使えるね!
${変数名%文字列}
若木 しげる
次は「値の後方削除」だよ
${変数名%文字列}
${変数名%%文字列}
若木 しげる
これは変数の値の末尾から文字列 にマッチする部分を削除した値を表示するよ
若木 みどり
${変数名#文字列}「末尾から」バージョンだね!
若木 しげる
同じく例を確認しよう!
VALUE="/home/midori/diary.txt"
コマンド出力
echo "${VALUE%.txt}"/home/midori/diary
echo "${VALUE%/*}"/home/midori
echo "${VALUE%midori*}"/home/
echo "${VALUE%%[!/]*}"/
若木 みどり
${VALUE$/*}dirname の代わりに使えるね!
${変数名/置換前/置換後}
若木 しげる
次は「値の置換」だよ!
${変数名/置換前/置換後}
${変数名//置換前/置換後}
若木 しげる
これは 変数名 の値の最初に現れる 置換前置換後 に置き換えた値を表示するよ// を使うと「最初に現れる」ではなく「全ての」 置換前置換後 に置き換えてくれるんだ
若木 しげる
これも例を見てみよう
VALUE="/home/midori/diary.txt"
echo "${VALUE/midori/shigeru}"
/home/shigeru/diary.txt
若木 みどり
それぞれ sed の置換のg フラグありなしの動きになるんだね!
${変数名^}, ${変数名,}, ${変数名~}
若木 しげる
最後は「大文字小文字の変換」だよ!似たような機能なのでまとめて紹介するね
若木 しげる
変数名 の値の小文字を大文字に変換した値を表示するよ^ は最初の1文字、^^ は全部を変換するんだ
${変数名^}
${変数名^^}
若木 しげる
変数名 の値の大文字を小文字に変換した値を表示するよ, は最初の1文字、,, は全部を変換するんだ
${変数名,}
${変数名,,}
若木 しげる
変数名 の値の大文字小文字を入れ替えた値を表示するよ~ は最初の1文字、~~ は全部を変換するんだ
${変数名~}
${変数名~~}
若木 みどり
tr の代わりに使えるね!
まとめ
若木 みどり
今回は bash 拡張のパラメータ展開を学んだよ!多くて一度で覚えきれないね…
若木 しげる
より便利に使えるようにするためにbash で追加された記述なのでみどりが挙げてくれたようにコマンド置換で代用できる場合が多いよ
若木 しげる
変数の値を細かく加工できて便利だけど急いで覚える必要はないと覚えておこう!