Shellで文字列変数をleftやrightするようにsubstring処理をしたい場合、単純に以下のような構文で表現してあげるだけでsubstring処理ができます。
${変数:ポジション:長さ}
以下のような sample という変数がある場合、${} を使うだけで様々な substring 処理ができるようになります。
sample="ABCDE12345vwxyz67890"
変数全体を表現
echo $sample ABCDE12345vwxyz67890
先頭から5文字を表現
echo ${sample:5:5} ABCDE
6文字目から5文字を表現
echo ${sample:5:5} 12345
末尾から5文字を表現
ここでは長さを取得するための ${#変数名} を使います。
echo ${sample:${#sample}-5}
67890
末尾から数えて8文字目から3文字を表現
つまり、末尾の5文字を除いて、後ろから3文字を表現します。
echo ${sample:${#sample}-8:3}
xyz
末尾から4文字を除いた文字を表現
echo ${sample::${#sample}-4} ABCDE12345vwxyz6
実行例
例えば、ファイル名の拡張子を置換したい場合などに便利ですね
$ mv $filename ${filename::${#filename}-4}.png