2017-01-26 15 views

ответ

5

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

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

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

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

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

С POSIX в Tilde expansion:

«Тильда-префикс» состоит из незаполненного ed в начале слова, за которым следуют все символы, предшествующие первому без кавычек в слове, или все символы в слове, если их нет.

С POSIX в Double Quotes:

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

Вы можете найти дополнительные объяснения в Why doesn't the tilde (~) expand inside double quotes? из Unix & Linux Stack.

+1

Упс, thnx, иногда я braindead. – Swifting

+2

Хороший ответ! В качестве альтернативы можно использовать '' $ {HOME} /. Git "'. – hek2mgl

+0

@ hek2mgl хорошая идея! Входит в ответ, спасибо :) – fedorqui