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 /
.