そのために sed を使用することを提案します:
NEW=$(echo MyDirectoryFileLine \
| sed 's/\(.\)\([A-Z]\)/\1-\2/g' \
| tr '[:upper:]' '[:lower:]')
最新情報 小文字に変換するのを忘れて、更新されたコード
s/\([A-Z]\)/-\L\1/g
を使用できます 大文字を見つけてダッシュに置き換え、それを小文字にします。ただし、これにより行の先頭にダッシュが表示されるため、それを処理するには別の sed 式が必要です。
これは動作するはずです:
sed --expression 's/\([A-Z]\)/-\L\1/g' \
--expression 's/^-//' \
<<< "MyDirectoryFileLine"