Почему тильда (~) не расширяется внутри двойных кавычек?
Я хочу проверить, скрыт или нет .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.