bashで変数から部分文字列を取得する

  • 49
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

bashで変数から部分文字列を取得する方法まとめ

パラメータ展開を利用して部分文字列を取得する

オフセットと長さを指定して文字列を取得する

指定方法
${パラメータ:オフセット:長さ}
部分文字列抽出
#!/bin/bash

HOGE="abcdef"

# オフセット位置から長さ分を取得
echo ${HOGE:0:2}
# -> ab

echo ${HOGE:2:2}
# -> cd

echo ${HOGE:4:2}
# -> ef

# 長さを省略した場合はオフセットから最後まで出力
echo ${HOGE:2}
# -> cdef

# 長さにマイナスを指定した場合は最後からマイナス分引いた位置までの長さになる
echo ${HOGE:0:-2}
# -> abcd

# オフセットの位置にマイナスを指定した場合は文法として別のパラメータ展開になる(デフォルト値の指定)
# 指定した変数が空文字列の場合は右に指定した文字が入る
echo ${HOGE:-2}
# -> abcdef
HOGE=
echo ${HOGE:-2}
# -> 2

%, %% 右端からの(最短の|最長の)パターン一致までを除外

右端からのパターン一致除外
#!/bin/bash

HOGE=hoge.tar.bz2

echo ${HOGE}
# -> hoge.tar.bz2

# 最短除外
echo ${HOGE%.*}
# -> hoge.tar

# 最長除外
echo ${HOGE%%.*}
# -> hoge

#, ## 左端からの(最短の|最長の)パターン一致までを除外

左端からのパターン一致除外
#!/bin/bash

HOGE=/home/user/hoge

echo ${HOGE}
# -> /home/user/hoge

# 最短除外
echo ${HOGE#*/}
# -> home/user/hoge

# 最長除外
echo ${HOGE##*/}
# -> hoge

参考

シェルスクリプトの変数を部分的に抜き出す! | 我が社を有名にするブログ