Когда косая черта в пути Linux должна быть вне кавычек в скрипте bash

#bash #tilde-expansion

#bash #расширение тильды

Вопрос:

Почему первое расширение не работает, а второе работает?

Я знаю, что тильду нужно расширять вне кавычек, но косая черта также неожиданно должна была быть снаружи.

 #!/bin/bash
ls ~"/Documents/bashscripts/test.sh"
ls ~/"Documents/bashscripts/test.sh"
  

Комментарии:

1. На самом деле это не дубликат. Другой вопрос заключается в том, что вся строка заключена в кавычки (поэтому оболочка вообще не пытается развернуть тильду). Этот вопрос касается цитирования строки после тильды, и оболочка должна это интерпретировать. Это определенно не то же самое.

2. Смешное. Кажется, что в другом вопросе упоминается путь как `~/»Documents/foo.sh » это тоже не было бы дубликатом, так как путь другой. Приятно видеть, что вопрос novell задан и на него дан ответ.

Ответ №1:

Это тонкость в том, как работает расширение тильды. Во втором случае тильда, за которой следует косая черта, расширяется до домашнего каталога текущего пользователя. В первом случае слово, за которым следует слово, заключенное в кавычки, пытаются расширить до домашнего каталога пользователя с именем «/Documents/bashscripts/test.sh «. Из manpage, раздел расширения тильды:

… все символы, предшествующие первой косой черте без кавычек, считаются префиксом тильды. Если ни один из символов в префиксе тильды не заключен в кавычки, символы в префиксе тильды, следующие за тильдой, рассматриваются как возможное имя входа. …