Мне интересно, если один только CD отправляет меня в мою домашнюю папку, а cd ~ делает то же самое, почему тогда ~ был добавлен в первую очередь?
Это что-то особенное для BASH или они будут вести себя по-другому в другой оболочке?
cd-command
home
Луис Альварадо
источник
источник
cd ~
противcd $HOME
противcd ~not-tandu
. Этот вопрос задает оcd
противcd ~
.Ответы:
~
Может быть использован для более чем просто. Любая команда может получить выгоду от наличия ярлыка для домашней папки. Так что нет необходимости, если вы хотите, чтобы CD в ваш дом, но как насчет~/.config
?В противном случае вам придется выписать домашний путь, использовать
$HOME
переменную var или сделать двеcd
s. Также для копирования или перемещения файлов:Поскольку большинство ваших файлов находятся дома, всегда полезно иметь ярлык.
источник
~
это сделать,cd ~user/download
чтобы перейти в каталог загрузки пользователя.В
cd
основном это вызовcd
без аргументов и в соответствии сcd
поведением «... если dir не указан, значение переменной оболочки HOME является значением по умолчанию». (из руководства Bash ). Напротив,cd ~
это когда вы передаете аргументcd
команде, что происходит,~
и shell выполнит расширение тильды . Что касается возврата в домашний каталог пользователя - нет никакой разницы. В любом случаеHOME
переменная окружения будет запрошена:По сути, это также не имеет никакого отличия от
cd $HOME
. Однако, в то время какcd
будет делать одно-единственное, тильду можно использовать для выполнения других расширений, например~+
для текущего рабочего каталога.Однако, что интересно, мы можем
unset HOME
сломаться,cd
но~
все равно будем работать:Почему ? Опять же, ответьте в руководстве:
Обратите внимание, что сброс не отличается от создания пустой переменной
HOME=
и имеет эффект. Документация конкретно говорит о сбрасывании переменной. Создание переменной равной пустой строке имеет эффект, противоположный тому, что мы ожидали:Здесь вы можете увидеть, что создание
HOME
пустой строки нарушает как тильду, так иcd
поведение.Тильда и
$HOME
есть какая то разница и другая причина существования.$HOME
является переменной оболочки, которая также случайно оказывается одной из переменных среды - и которая доступна для всех программ; в C вы будете использоватьenviron()
для доступа к этому. В отличие от этого,tilde
это специфичный для оболочки синтаксис, который выполняет раскрытие тильды, хотя вы можете использоватьwordexp()
функцию для выполнения подобного оболочке расширения ( ссылки ) также в Си.Причина, по которой
~
представитель представляетHOME
ответ в этом вопросе : однажды персонаж тильды поделился тем же ключом сHOME
терминалом Lear-Siegler ADM-3A.HOME
напротив, переменная окружения имела чисто символическое значение и не имела физических представлений.Кроме того, тот факт, что
HOME
это переменная окружения, позволяет нам ее сбрасывать, поскольку мы не можем установить~
что-то еще с помощью простых средств.Обратите внимание на пустую строку, где сначала
echo
выводится неустановленная переменная, и тот факт, что. В отличие от этого, мы не можем делать такие вещи для тильды:Однако изменение
HOME
влияет на~
:Кроме того, поскольку он
~
также работает как символ расширения, мы можем сделать что-то вроде этого, чтобы показать текущий рабочий каталог:Принимая во внимание, что если мы хотим сделать это через переменные окружения, нам нужно
PWD
иHOME
остается тем же самым, или если вы делаете что-то подобноеecho $HOME+
- это просто конкатенация строк / переменных. Но опять же,~+
берет информацию из переменных среды:Примечание :
~+
и~-
расширения работы вksh
, но не вdash
.Чтобы ответить на некоторые ваши конкретные вопросы:
Нет, это должно быть последовательное поведение.
ksh
,dash
иcsh
- все ведут себя одинаково сcd
илиcd ~
.Я бы сказал, удобство и исторические причины, как объяснено в связанном ответе о тильде. В конце концов, он вырос не только для расширения домашнего каталога.
источник
Независимо от того, находитесь ли вы на нескольких уровнях папок выше или ниже
$HOME
, командыcd
иcd ~
делают одно и то же и не отличаются - он отправит вас обратно в ваш каталог HOME.ОДНАКО: Когда вы находитесь на 1 или более уровней папок выше HOME и хотите перейти ПРЯМО в подкаталог на 1 или более уровней папок ниже
$HOME
, функция tilde (~
) оказывается полезной благодаря сохранению нажатий клавиш при замене текста, необходимого для ссылки чтобы$HOME
при вводеcd
команды. Например;источник
~ обозначает / home / username location, поэтому вы экономите время при наборе текста. Например, cd / home / username / Downloads такой же, как cd ~ / Downloads, но меньше печатает. Обе команды делают то же самое, измените рабочий каталог на это место.
источник
root
, домашний каталог обычно находится снаружи/home