Unix variable best practice: должна ли переменная, содержащая путь, заканчиваться косой чертой


Как лучше всего хранить каталог в имени файла в системе unix? Должен ли путь к каталогу заканчиваться косой чертой?

Метод А

TMP="/tmp/pasteTmp/"

Что позволяет вам сделать:

cd "$TMP$fileName"

Метод B

TMP="/tmp/pasteTmp"

Что позволяет сделать (с дополнительной косой чертой, которая кажется менее чистой):

cd "$TMP/$fileName"

Но также позволяет делать:

cd "$TMP/actualFileName"
Что, по-моему, невозможно при использовании первого метода.
3 8

3 ответа:

Это не имеет значения. Вместо этого вы всегда должны предполагать, что завершающей косой черты нет при использовании пути, добавляя свой собственный. /foo / / эквивалентно /foo/, поэтому это работает.

Когда вы ссылаетесь на каталог в обычном использовании, вы не включаете косую черту: мой домашний каталог /home/andy, а не /home/andy/. Если вы пишете сценарии, которые предполагают наличие косой черты, рано или поздно вы забудете включить ее и удивите себя.

Я не уверен, что согласен с вами в том, что дополнительный Слэш "кажется менее чистым". Когда вы не используете переменные, вы ожидаете, что косая черта разделит имена каталогов и файлов; когда имя каталога хранится в переменной оболочки, я все еще нахожу его естественно читать и писать с косой чертой, разделяющей части.

Когда вы работаете над большим приложением монстра с сотнями сценариев и множеством библиотек и исполняемых файлов, вы начинаете больше беспокоиться о том, что вызывает меньше боли, а не о том, что "кажется менее чистым". Я согласен, что двойной Слэш выглядит забавно, но реальность такова, что Unix это не волнует. Я бы скорее предположил, что завершающей косой черты нет, и знал, что она все еще будет работать, когда я добавлю ее сам, чем надеялся, что все вспомнят о том, чтобы включить ее, а затем мой код сломается, когда кто-то другой забудет о добавлении косую черту.

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