シェルスクリプト (文字列関連 - 変数定義)




1. 変数に格納された文字列を加工する。


1.1. 文字列の末尾から指定した文字列に一致する部分を取り除く

例では test.tar.gz の末尾から tar.gz を取り除く。

FILE=test.tar.gz
NAME=${FILE%.tar.gz}

変数 NAME には test が入ります。

ファイル名から拡張子を除きたい場合などに使用。


1.2. 文字列の末尾から 1 つ目の指定した文字列までを取り除く

例では test.tar.gz の末尾から 1 つ目の . (ピリオド) までを取り除く。

FILE=test.tar.gz
NAME=${FILE%.*}

変数 NAME には test.tar が入ります。


1.3. 文字列の末尾から 2 つ目の指定した文字列までを取り除く

例では test.tar.gz の末尾から 2 つ目の . (ピリオド) までを取り除く。

FILE=test.tar.gz
NAME=${FILE%.*.*}

変数 NAME には test が入ります。


1.4. 文字列の先頭から 1 つ目以降の文字列を取得

例では test.tar.gz の先頭から 1 つ目の . (ピリオド) 以降を取得。

FILE=test.tar.gz
NAME=${FILE#*.}

変数 NAME には tar.gz が入ります。


1.5. 文字列の先頭から 2 つ目以降の文字列を取得

例では test.tar.gz の先頭から 2 つ目の . (ピリオド) 以降を取得。

FILE=test.tar.gz
NAME=${FILE#*.*.}

変数 NAME には gz が入ります。


1.6. 文字列の先頭から見て最後の指定した文字列以降の文字列を取得

例では /tmp/test1/test2/test.tar.gz の先頭から見て最後の / 以降を取得。

FILE=/tmp/test1/test2/test.tar.gz
NAME=${FILE##*/}

変数 NAME には test.tar.gz が入ります。

例と同じことは basename コマンドを使ってもできます。


1.7. 文字列の先頭から数えて開始位置から指定した文字数の文字列を取得

例では /tmp/test1/test2/test.tar.gz の先頭から数えて開始位置 4 から 7 文字
の文字列を取得。

FILE=/tmp/test1/test2/test.tar.gz
NAME=${FILE:4:7}

変数 NAME には /test1/ が入ります。