ファイル名から.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}