Какова важность / в следующей команде Linux

Между чем различие

cd abc/xyz/

и

cd abc/xyz

Из чего важность / в конце? Который является правильным способом использовать его? Поскольку оба, кажется, работают правильно.

4
задан 16.10.2013, 01:02

4 ответа

Различия могут быть незначительными в cd пример Вы, если, но остерегаются когда Вы mv файлы.

Например, если Вы хотите переместить несколько файлов в другой каталог, и Вы вводите

for i in *.mp3 ; do mv $i dest ;  done

При упущении запаздывающей наклонной черты затем каждый из перемещенных файлов перезапишет названный файл dest (первое на самом деле создаст названный файл dest если это уже не существует). Результат состоит в том, что все файлы кроме последнего перезаписываются с последним файлом, и это теперь называют dest.

Для перемещения в каталог необходимо указать запаздывание /

for i in *.mp3 ; do mv $i dest/ ;  done

Один побочный эффект наклонной черты состоит в том, что, если каталог не существует, Вы получите сообщение об ошибке.

9
ответ дан 07.12.2019, 19:12
cd abc/xyz/

корректный способ сделать его. Но если Вы указываете

cd abc/xyz

и если CD выясняет, что xyz является каталогом, он принимает присутствие запаздывания /

2
ответ дан 07.12.2019, 19:12
cd abc/xyz

Корректно, так как "abc/xyz" относится к '"xyz" объекту в каталоге "abc"'. Когда Вы вводите

cd abc/xyz/

это относится к '"" объекту в "xyz" каталоге в каталоге "abc"'. "" (Пустая строка) объект автоматически переводится в, который является "текущим" каталогом, который в этом случае является "xyz" каталогом. Таким образом, все это удается к тому же самому.

(Некоторые люди чувствуют, что каталогам "нужно" было добавить наклонную черту. Они ошибаются.)

2
ответ дан 07.12.2019, 19:12

Они идентичны. Строку рассматривают операторы имени файла как "путь", который является абстракцией, и каждый путь связан с базовым именем и другим путем, dirname. Два пути идентичны, если каждый из них является той же строкой. Для Вашего примера:

cas var$ dirname abc/xyz; basename abc/xyz
abc
xyz
cas var$ dirname abc/xyz/; basename abc/xyz/
abc
xyz

Обратите внимание, что, в то время как некоторые программы рассматривают строки тождественно, включая все обычные утилиты UNIX, если они - те же пути, существуют другие, которые действительно заботятся о запаздывающих наклонных чертах. Самый важный из них rsync.

Постскриптум От спецификации POSIX, Разрешения Пути:

Путь, который содержит по крайней мере один символ ненаклонной черты и это заканчивается одной или несколькими запаздывающими наклонными чертами, буду разрешен, как будто единственный точечный символ ('.') был добавлен к пути.

1
ответ дан 07.12.2019, 19:12

Теги

Похожие вопросы