Skip to content

Instantly share code, notes, and snippets.

@rodrigolive
Created March 4, 2021 18:05
Show Gist options
  • Save rodrigolive/3763c3cdeafd1f6cb3b36d8daf739bfc to your computer and use it in GitHub Desktop.
Save rodrigolive/3763c3cdeafd1f6cb3b36d8daf739bfc to your computer and use it in GitHub Desktop.
05 : Can you create it?
# directamente en shell hagas:
touch '"\?$*'"'"'MaRViN'"'"'*$?\"'
@rodrigolive
Copy link
Author

El nombre de fichero contiene varios caracteres que el shell bash interpreta como símbolos especiales (* el ? etc). Entonces lo primero que hacemos es poner el nombre del fichero

"\?$*'MaRViN'*$?\"

Dentro de comillas simple, porque comillas dobles tienen interpolación (bash entra dentro de la cadena y busca caracteres especiales), pero las comillas simple son literales (lo que pones dentro es lo que sale sin que bash lo modifique):

'"\?$*'MaRViN'*$?\"'

Pero hay un problema: el nombre de fichero contiene comillas simple, por lo que nuestra cadena de comillas simple se quedaría entrecortada en 3 bloques si lo les los "abre y cierra comillas": "\?$*, MaRViN y *$?\".

Afortunadamente en bash se puede poner cadenas de texto entrecomilladas contiguas como si fueran un string: echo '12''34''56' saldría 123456 porque junta el '12' con el '34'y el '56'.

Por lo cual creamos 3 bloques alternando comillas para poder entrecomillar comillas. Trabalengua! 😅

'"\?$*'
+
"'"
+
'MaRViN'
+
"'"
+
'*$?\"'

Cada una correctamente entrecomillada y adyacente.

@crismoraba
Copy link

Pero la comilla simple entiendo que se ejecuta literal con la doble, como excepción, no? Porque supongo que esto ' ' ' no vale para entrecomillar comilla simple.. es así?

@rodrigolive
Copy link
Author

rodrigolive commented Mar 5, 2021

Para entrecomillar la simple se usa dobles "'" (doble, simple, doble). Para entrecomillar la doble se usa la simple '"' (simple,doble,simple) o un escape (barra para atrás) "\""

El tema es que el escape no está disponible dentro de las comillas simples, pq son literales.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment