Estoy trabajando en un script de python que pasa las ubicaciones de los archivos a un subproceso scp. Todo está bien, pero estoy en una situación en la que puedo terminar concatenando una ruta con un nombre de archivo de modo que haya un doble '/
en el camino. Sé que a bash no le importa si tiene varios separadores de archivos, pero me pregunto cómo se rectifica exactamente eso. ¿Es bash lo que quita /
extra? s o realmente no importa nunca?
Pregunto porque me ahorrará varias líneas de código para buscar /
adicionales s mientras se concatena. Sé que no es gran cosa, pero también tengo curiosidad. Tengo un script bash que tiene la línea cd //usr
(en lugar de cd /usr
), lo que parece implicar que podría ser importante usar múltiples /
s en un camino
Respuesta aceptada:
Se permiten múltiples barras y son equivalentes a una sola barra. De la especificación Single Unix (versión 4), definiciones básicas §3.271 nombre de ruta:"Múltiples barras inclinadas sucesivas se consideran lo mismo que una barra inclinada".
Hay una excepción:si un nombre de ruta comienza con dos caracteres de barra inclinada sucesivos, el primer componente que sigue a los caracteres de barra inclinada iniciales puede interpretarse de una manera definida por la implementación. (ref:definiciones base §4.13 resolución de nombre de ruta). Linux en sí mismo no hace esto, aunque algunas aplicaciones podrían hacerlo, y otros sistemas unix-ish sí (por ejemplo, Cygwin).
Un /
final al final de un nombre de ruta obliga al nombre de ruta a referirse a un directorio. En (POSIX 1003.1-2001 (Single Unix v4) definiciones base §4.11 resolución de nombre de ruta, un /
final es equivalente a un /.
final . POSIX 1003.1-2008 (Single Unix v4) definiciones base §4.13 elimina el requisito de hacerlo equivalente a /.
, para hacer frente a directorios no existentes (por ejemplo, mkdir foo/
es necesario para funcionar, mientras que mkdir foo/.
no lo haría:consulte la justificación del cambio).
Para programas que actúan sobre una entrada de directorio, si foo
es un enlace simbólico a un directorio, luego pasa foo/
es una forma de hacer que el programa actúe sobre el directorio en lugar del enlace simbólico.
¹ Tenga en cuenta que esto se aplica solo a la resolución de nombres de ruta, es decir, al acceder a archivos. Las manipulaciones de nombres de archivo pueden funcionar de manera diferente. Por ejemplo basename
y dirname
ignorar las barras inclinadas finales.