Что делает маленький волнистый ~ в Linux?

25

У меня есть два случая его использования, и мне интересно, что каждый из них делает:

  1. service=~

  2. mv ~/Desktop/Service$version.tgz $service

Что делает маленький волнистый ~?

Затем, после этого, что бы cd $serviceсделать?

О_О
источник
3
это так заслуживает тега [волнистый характер]
cregox
3
Тильда, это специфическая оболочка, а не специфичная для Linux.
Дэвид Аллан Финч
@Cawas: спросите, и вы получите.
Дейв Шерохман
@ Дэйв спасибо! Но кажется, что Крис ненавидел это. Ну что
ж
Это действительно первый раз, когда об этом спрашивают? Я ожидал, что это будет закрыто как дубликат.
Эрик Б

Ответы:

45

Волнистая вещь называется «тильда».

Он расширяется до вашего домашнего каталога.

Пытаться

echo ~
echo $HOME

Оба утверждения помещают ваш домашний каталог в строку.

Смотрите bash Tilde Expansion для подробностей.

Mikel
источник
8
Приведенное выше сравнение, хотя и допустимо, возможно, вводит в заблуждение: тильда работает только во время интерпретации оболочки в сценариях и в командной строке. Переменная окружения $ HOME, однако, работает везде, где работает переменная окружения, а это гораздо больше мест.
Мэй
36

«Волнистый» называется тильдой. Он используется для ссылки на ваш домашний каталог, который в Linux, обычно /home/username . Он также хранится в $HOMEпеременной окружения. Расширение ~до расположения домашнего каталога - это работа оболочки (например, zsh или bash) или файлового менеджера (например, Nautilus), а не сама файловая система или ОС.

Вы также можете использовать это для ссылки на домашний каталог другого пользователя. Например, если имя пользователя другого пользователя bob, вы можете обратиться к его домашнему каталогу ~bob, который будет расширен до /home/bob/.

Первый пример , который вы дали устанавливает переменную serviceк ~, так что соответствует вашей домашней директории. Это эквивалентно service=/home/usernameили service=$HOME.

Второй пример копирует файл ~/Desktop/Service$version.tgz(или /home/username/Desktop/Service$version.tgz) в /home/username. Эта команда эквивалентна:

mv ~/Desktop/Service$version.tgz ~

или

mv ~/Desktop/Service$version.tgz $HOME

или

mv ~/Desktop/Service$version.tgz /home/username/

Третий изменит текущий рабочий каталог ( $PWD) на /home/username/. Это эквивалентно:

cd /home/username/

или

cd $HOME
Wuffers
источник
3
Следует помнить еще одну вещь: расширение Tilde - это работа оболочки или файлового менеджера, это не функция самой файловой системы Linux. Таким образом, он часто не работает в конфигурационных файлах, а добавление кавычек вокруг "~" останавливает его расширение в оболочке.
Грамбель
3
Также следует отметить, что домашние каталоги не обязательно лежат в / home, поэтому не следует предполагать, что ~ расширяется до / home / [мое имя пользователя] или что ~ bob расширяется до / home / bob
darkliquid
Спасибо за предложение @Grumbel. И спасибо @PriceChild за добавление предложения @ darkliquid!
Вуфферс
10

В # 1 и # 2: ~ это ваш домашний каталог, поэтому если вы qwerty, скорее всего это будет каталог / home / qwerty. Поэтому постарайтесь ls ~это увидеть.

Для # 1: мне кажется, что служба переменных определяется как ваш домашний каталог.

Это означает, что после того, как # 2 переместил файл tgz из подкаталога Desktop в ваш домашний каталог, # 3 затем изменился на домашний каталог.

nomaderWhat
источник
5

Похоже, команды делают следующее.

  1. Присвойте переменную с именем service вашей домашней папке, например:

    /home/user
    
  2. Он перемещает файл с вашего рабочего стола на верхний уровень вашего домашнего каталога, например:

    /home/user/Desktop/Service$version.tgz $service
    
  3. Затем скрипт меняет каталог на верхний уровень домашнего каталога.

Итак, все, что делает скрипт, это просто очищает ваш рабочий стол, /home/userвместо этого перемещая файл в вашу папку.

Джеймс
источник
1

Здесь я добавлю, что ~ user также раскрывает домашний каталог [user], так что это не просто ярлык для вашего собственного домашнего каталога.

Например:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john
Rooke
источник