Почему тильда (~) не расширяется внутри двойных кавычек?

Я хочу проверить, скрыт или нет .git папка существует. Первой мыслью было использовать:

if [ -d "~/.git" ]; then
   echo "Do stuff"
fi

Но -d видимо не ищет скрытых папок.

1 ответ

Решение

Проблема связана с тем, что тильда находится в двойных кавычках.

Чтобы его расширить, нужно поставить тильду вне кавычек:

if [ -d ~/".git" ]; then   # note tilde outside double quotes!
   echo "Do stuff"
fi

Или, в качестве альтернативы, как прокомментировал ниже hek2mgl, используйте $HOME вместо ~:

if [ -d "$HOME/.git" ]

Из расширения POSIX в Тильде:

"Префикс тильды" состоит из символа без кавычек в начале слова, за которым следуют все символы, предшествующие первому без кавычек в слове, или все символы в слове, если его нет.

Из POSIX в двойных кавычках:

Заключение символов в двойные кавычки ( "") должно сохранять буквальное значение всех символов в двойных кавычках, за исключением символов доллара, обратной кавычки и обратной косой черты, как указано ниже:

Вы можете найти дополнительные объяснения в разделе Почему тильда (~) не раскрывается в двойных кавычках? из стека Unix и Linux.

Другие вопросы по тегам