3

На моей машине с Linux некоторые переменные окружения содержат списки каталогов. Каталоги разделены : Но иногда они разделяются :: . Является ли это просто ошибкой, которую следует рассматривать как : или это означает, что пустая строка является одним из каталогов (что, вероятно, следует интерпретировать как текущий каталог).

Большинство каталогов, указанных в переменных среды, имеют следующий формат:

/aaa/bbb/ccc

Тем не менее, некоторые из них имеют этот формат:

/aaa/bbb//ccc

Обратите внимание на двойную косую черту между bbb и ccc . Это просто ошибка, которая интерпретируется как одиночная косая черта, или она имеет особое значение?

2 ответа2

3

Двойное двоеточие (:::) действительно означает текущий каталог. Руководство по Bash описывает PATH как:

Разделенный двоеточиями список каталогов, в которых оболочка ищет команды. Имя каталога нулевой длины (нулевое) в значении PATH указывает текущий каталог. Нулевое имя каталога может отображаться в виде двух соседних двоеточий или в качестве начального или конечного двоеточия.

Но лично я думаю, что для ясности лучше явно указать текущий каталог (например, /foo/bar:.).

Что касается косой черты, любое количество соседних косых черт рассматривается как одна косая черта.

1

несколько разделителей '/' игнорируются:

$ cd .////somedir

эквивалентно

$ cd somedir

Что касается дополнительных разделителей в вашем PATH, небольшой эксперимент показывает, что они также игнорируются.

По крайней мере, это:

/home/jon.kiparsky:2040 $ echo $PATH
/home/jon.kiparsky/bin::::::/home/jon.kiparsky/bin::/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

не сломал мой путь! :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .