Como criar um arquivo com um nome que comece com o símbolo ‘-’

Como criar um arquivo com um nome que comece com o símbolo ‘-’

Quero usar o touchcomando no terminal Linux para criar um arquivo com um nome que comece com o símbolo -, digamos -attempt.

Como posso superar o fato de -ser um personagem especial?

Por exemplo, se eu quisesse criar um arquivo com o nome #attempt, não poderia simplesmente escrevertouch #attempt

Em vez disso eu teria que escrever touch \#attempt, mas no -caso mesmo que eu use \ainda não funciona bem).

Responder1

Dois caminhos:

Afaste- -se do primeiro caractere

touch ./-foo

Ou use o --marcador de fim de interruptores

touch -- -foo

Responder2

touch \#attemptfunciona porque o sinal de hash é especial para o shell. Da mesma forma, você precisaria de algo como touch \(foo\), ou touch 'this & that'para nomes de arquivos com parênteses ou e comercial etc.

Mas escapar do traço não ajuda, pois não é especialpara a concha, mas para o utilitário iniciado pelo shell. Executar a linha de comando do shell touch \-fooé o mesmo que executar touch -foo, touchobterá o argumento único -foode qualquer maneira.

Então, em vez de escapar, é necessário algo mais.

A maneira padrão de dizer a um programa para parar de interpretar argumentos de comando como opções (possíveis) é inserir o argumento --após as opções. Por exemplo, isso seria executado rmcom a opção -f, em um arquivo chamado -r:

rm -f -- -r

(e rm -- --removeria um arquivo chamado --.)

Alternativamente, você pode contornar o problema certificando-se de que o traço não seja o primeiro caractere do nome do arquivo, geralmente acrescentando ./. Então, novamente, isso removeria um arquivo chamado -rf:

rm ./-rf

informação relacionada