Unix variable best practice: должна ли переменная, содержащая путь, заканчиваться косой чертой
Как лучше всего хранить каталог в имени файла в системе unix? Должен ли путь к каталогу заканчиваться косой чертой?
Метод А
TMP="/tmp/pasteTmp/"
Что позволяет вам сделать:
cd "$TMP$fileName"
Метод B
TMP="/tmp/pasteTmp"
Что позволяет сделать (с дополнительной косой чертой, которая кажется менее чистой):
cd "$TMP/$fileName"
Но также позволяет делать:
cd "$TMP/actualFileName"
Что, по-моему, невозможно при использовании первого метода.3 ответа:
Это не имеет значения. Вместо этого вы всегда должны предполагать, что завершающей косой черты нет при использовании пути, добавляя свой собственный. /foo / / эквивалентно /foo/, поэтому это работает.
Когда вы ссылаетесь на каталог в обычном использовании, вы не включаете косую черту: мой домашний каталог
Я не уверен, что согласен с вами в том, что дополнительный Слэш "кажется менее чистым". Когда вы не используете переменные, вы ожидаете, что косая черта разделит имена каталогов и файлов; когда имя каталога хранится в переменной оболочки, я все еще нахожу его естественно читать и писать с косой чертой, разделяющей части./home/andy
, а не/home/andy/
. Если вы пишете сценарии, которые предполагают наличие косой черты, рано или поздно вы забудете включить ее и удивите себя.
Когда вы работаете над большим приложением монстра с сотнями сценариев и множеством библиотек и исполняемых файлов, вы начинаете больше беспокоиться о том, что вызывает меньше боли, а не о том, что "кажется менее чистым". Я согласен, что двойной Слэш выглядит забавно, но реальность такова, что Unix это не волнует. Я бы скорее предположил, что завершающей косой черты нет, и знал, что она все еще будет работать, когда я добавлю ее сам, чем надеялся, что все вспомнят о том, чтобы включить ее, а затем мой код сломается, когда кто-то другой забудет о добавлении косую черту.
Поставьте себя в ситуацию, когда вы контролируете, будет ли ваш код работать. Зависимость от других, чтобы следовать конвенции приводит к головной боли и 3 утра звонки поддержки, когда они неизбежно не делают.