Esses modificadores de histórico também podem ser aplicados a variáveis em csh de onde o recurso vem.
Mas bash optou por não copiar essa parte. zsh fez embora. Então você pode usar zsh em vez de bash aqui:
$ file=foo/bar/
$ echo $file:h # (or ${file:h})
foo
(o exemplo escolhido para mostrar que zsh realmente melhorou em csh , o que teria retornado foo/bar ; ele também suporta alguns modificadores úteis adicionais).
Em outros shells, você sempre pode usar dirname :
$ dir=$(dirname -- "$file")
$ echo "$dir"
foo
(embora tenha cuidado, não funciona corretamente para nomes de diretório que terminam em caracteres de nova linha).
Em bash , como em outros POSIX shells, você pode usar ${file%/*} , mas ele gera resultados inesperados em alguns casos como foo/bar/ ou foo ou / .