Por que minha função não funciona com espaços? (cd, dirname) [duplicado]

1

Eu tive essa função, eu a uso com muita frequência e funciona bem.

Aqui está:

cdx () { cd 'dirname $1' ; }

No entanto, isso não funciona com espaços. Quando eu uso assim por exemplo

cdx ~/desktop/folder/file\ file

Retorna

usage: dirname path

Mas o que estou passando é essencialmente dirname path . Então, o que devo fazer para consertar isso? (Também faz o mesmo quando há espaços em nomes de pastas)

Meu primeiro pensamento foi usar citações, como cdX "directory\ whatever" , mas também não funcionou.

    
por DisplayName 13.01.2015 / 22:50

1 resposta

1

Se você simplesmente escrever $i , os espaços transformarão seu conteúdo variável em vários argumentos. Se você quer preservar espaços, você tem que citar coisas.

Para o seu exemplo, você provavelmente quer:

cdx () { cd -- "$(dirname -- "$1")" ; }

E lembre-se sempre cite suas variáveis.

    
por 13.01.2015 / 22:59