Por alguna extraña razón, intenté "'" como separador de palabras en los identificadores, como en:
$ export foo'bar=1
>
> ^C
$
El resultado es como se muestra arriba, id est el aviso cambia a ">" y el sistema obviamente espera más información de mi parte. Como ves, tuve que presionar Ctrl-C para escapar. Lo mismo ocurre con otros comandos como
$ ls foo'bar
$ mkdir foo'bar
Tengo curiosidad sobre el sentido de todo esto, eso es lo que tiene un significado especial "'" en los comandos de terminal (de hecho, es tan especial que se desarma incluso dentro de los identificadores).
Extra: Como comentario aparte, también me gustaría conocer el conjunto de caracteres especiales o no válidos en los nombres de archivos y carpetas, tanto en sistemas Unix como Windows (para obtener el subconjunto común de los seguros) (en particular, ¿qué pasa con todos no ASCII?)
Gracias Denis
fuente
Respuestas:
El 'carácter es un personaje muy poderoso cuando se usa en cualquier comando de shell. Básicamente, el '(marcas de apóstrofe) desactiva todo tipo de transformaciones o modificaciones. Consideraría todo lo que se incluye con las 'marcas como una sola entidad, es decir, un solo parámetro. Absolutamente no tendría lugar ningún tipo de sustitución o expansión.
Ejemplo:
produciría en la salida la
$HOME
propia cadena y no imprimiría la ruta a su directorio de inicio. Dado que las comillas simples evitan cualquier tipo de expansión, la sustitución y simple considera lo que esté presente como un parámetro simple en sí mismo.Si desea utilizar el apóstrofe tal como es, debe escapar:
Si no se escapa, esperará a que se cierre su par, como sucedió en su primer ejemplo.
Entonces, corregido, su comando será:
NOTA: Como lo notó Milan Todorovic, esto no será válido, porque no puede usar apóstrofe en este caso.
fuente
El personaje
'
es un personaje especial. Lo usa para marcar parte de la entrada de la línea de comandos que no se cambiará (por ejemplo, sin reemplazo de comodines). Por ejemplo:Esto significa que el argumento para
ls
wasbla*
y no todo lo que comienza conbla
.La razón por la que obtienes un
>
personaje es porque debes usar uno'
para abrir y otro'
para cerrar parte que no se cambiará.Si desea utilizar
'
en los nombres de carpeta que debe escapar de esta manera:\'
. Entonces, si desea enumerar la carpeta con nombrefoo'bar
, debe escribirls foo\'bar
.Ah, y no estoy seguro de si es posible usar
'
en nombres de variables de entorno. Creo que no puedes usarexport foo\'bar=1
,Espero que esto ayude.
fuente