Только недавно узнал, что $(..) удаляет _все_ конечные/trailing «\n». Значит, если (вдруг) filename оканчивает на «\n» - уже без жестких костылей не обработать.
Как например получить realpath или dirname (возможно файл и в /..)?
Верните веру в человечество, на чем надежнее писать скрипты, python?
> file=$'a\n'
> touch "$file"
> ls "$file" | cat
> a
> realpath "$file"
/tmp/a
> ls "$(realpath "$file")"
/bin/ls: cannot access /tmp/a: No such file or directory