Как переменные могут использовать “~” для cd'ing?

Что было бы, если?

if [[ $(ping -c1 -w1 google.com) ]]
then 
    echo "All good in the hood"
else
    echo "Where are my interwebs?"
fi

или как одна строка

if [[ $(ping -c1 -w1 google.com) ]]; then  echo "All good in the hood"; else; echo "Where are my interwebs?"; fi
13
08.11.2015, 17:17
2 ответа

В CD ~/z / вы используете расширение Тильды для расширения ~ в корневой каталог. В ОСНОВА = "~/z", вы - то, не потому что вы заключили в кавычки ~ символ, таким образом, это не расширено. Именно поэтому вы получаете сообщение, жалующееся на несуществующее ~ каталог. Решение не состоит в том, чтобы заключить его в кавычки, т.е. ОСНОВА = ~/z, чтобы позволить расширению произойти.

25
27.01.2020, 19:52

@jw013 дал обоснованное объяснение и решение.

Но могут быть случаи, когда необходимо процитировать пути, например, когда они содержат несколько пробелов или специальные символы. В этом случае вы должны использовать $HOME вместо ~, т.е. ваш BASE="~/z" станет BASE="$HOME/z" и будет работать корректно, так как подстановка параметров интерпретируется в двойных кавычках, в отличие от разложения тильд.

11
27.01.2020, 19:52

Теги

Похожие вопросы