ファイル名から.mdの拡張子のみ除外したいと思い、${str:start:end}の構文で以下のように実現しようと思った。
# !/bin/bash
str="hello.md"
echo ${str:0:-3}
この処理は「文字列の先頭から終端の3文字前までのstrを出力する」であるため、helloと表示されるのが望ましい。
しかし、これを実行すると-2: substring expression < 0とエラーが出てしまう。
これを解決するには、変数に格納された文字列の長さを表す#を利用し、以下のように修正すると正常に動作する。
# !/bin/bash
str="hello.md"
echo ${str:0:${#str}-3}