Cómo crear un archivo con un nombre que comienza con el símbolo '-'

Cómo crear un archivo con un nombre que comienza con el símbolo '-'

Quiero usar el touchcomando en la terminal de Linux para crear un archivo con un nombre que comience con el símbolo -, digamos -attempt.

¿Cómo puedo superar el hecho de que -sea un personaje especial?

Por ejemplo, si quisiera crear un archivo con el nombre #attempt, no podría simplemente escribirtouch #attempt

En su lugar tendría que escribir touch \#attempt, pero en el -caso, incluso si lo uso, \todavía no funciona bien).

Respuesta1

Dos caminos:

Aléjalo -del primer carácter.

touch ./-foo

O use el --marcador de fin de interruptores

touch -- -foo

Respuesta2

touch \#attemptfunciona porque el signo hash es especial para el shell. De manera similar, necesitaría algo como touch \(foo\), o touch 'this & that'para nombres de archivos con paréntesis o símbolos, etc.

Pero escapar del tablero no ayuda ya que no es especial.al caparazón, sino a la utilidad lanzada por el shell. Ejecutar la línea de comando del shell touch \-fooes lo mismo que ejecutar touch -foo; de todos modos touchobtendrá el argumento único -foo.

Entonces, en lugar de escapar, se requiere algo más.

La forma estándar de decirle a un programa que deje de interpretar los argumentos del comando como (posibles) opciones es insertar el argumento --después de las opciones. Por ejemplo, esto se ejecutaría rmcon la opción -fen un archivo llamado -r:

rm -f -- -r

(y rm -- --eliminaría un archivo llamado --.)

Alternativamente, puede solucionar el problema asegurándose de que el guión no sea el primer carácter del nombre del archivo, generalmente anteponiendo ./. Nuevamente, esto eliminaría un archivo llamado -rf:

rm ./-rf

información relacionada