Неверно ли ссылаться на символ «~» в качестве пути к домашнему каталогу в Windows?

296
user598527

Символ тильды ~не работает как ярлык домашнего каталога в Windows, в отличие от систем Unix . Я всегда использовал этот символ в качестве исходного пути в письменном тексте для всех операционных систем, и мне интересно, действительно ли это неправильно.

%USERPROFILE% может быть более подходящим, поскольку он может быть использован в качестве фактического ярлыка в проводнике Windows.

0

2 ответа на вопрос

3
slhck

Символ тильды может иметь совершенно другое значение в Windows, и я бы посчитал его недействительным - или, по крайней мере, двусмысленным - использовать его для ссылки на домашний каталог пользователя.

В файловых системах, которые не поддерживают длинные пути к файлам, тильда будет использоваться в качестве символа замены :

Под длинным именем файла понимается любое имя файла, которое превышает короткое соглашение по именованию в стиле MS-DOS (также называемое 8.3). Когда вы создаете длинное имя файла, Windows может также создать краткую форму имени 8.3, называемую псевдонимом 8.3 или коротким именем, и также сохранить ее на диске.

[...]

Во многих файловых системах имя файла будет содержать тильду (~) в каждом компоненте имени, которое является слишком длинным, чтобы соответствовать правилам именования 8.3.

Вы можете прочитать больше о 8.3 именах файлов в Википедии, которая является устаревшим соглашением об именах файлов, которое восходит ко временам DOS.

Тем не менее, современные программы действительно могут использовать ~в качестве псевдонима для домашнего пользователя - например, PowerShell, см. Ответ @ Broam. И, конечно, есть разница между пользовательским типом, который интерпретируется оболочкой, и тем, что может выводить оболочка. Однако, поскольку вы не можете предполагать, что пользователи будут использовать PowerShell или быть знакомы с соглашениями Unix, я бы порекомендовал против этого.

Редко можно найти имена 13-летних файлов, но в то же время я считаю, что современные парсеры команд, которые поддерживают тильду (например, PowerShell и Bash), могут обрабатывать ~ в именах файлов в этой ситуации, так как ~ / обычно является префиксом и не является частью имени файла (например, README ~ 1.TXT) Broam 5 лет назад 0
Да, вы правы - нужно учитывать замену, которая происходит после того, как пользователь ввел путь с тильдой (аналогично тому, как Bash сначала расширит его, прежде чем команда действительно увидит тильду). Тем не менее, все еще есть некоторая двусмысленность, тогда как под Unix тильда не используется ни для чего другого IIRC. slhck 5 лет назад 0
1
Broam

В большинстве случаев вы правы (что безумно приятно, когда я работаю за компьютером).

Одно исключение: PowerShell допускает использование ~ символа и расширяется до вашего домашнего каталога, если вы используете завершение табуляции.

Также поддерживается сторонняя установка Bash (например, копия, поставляемая с Git) ~.