Що робить маленький зухвало ~ в Linux?


25

У мене є два випадки його використання, і мені цікаво, що кожен робить:

  1. service=~

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

Що робить маленький каламутно ~?

Потім, після цього, що б cd $serviceробити?


3
це так заслуговує на тег [squiggly]
cregox

3
Tilde - це оболонка, яка не є специфічною для Linux.
Девід Аллан Фінч

@Cawas: Запитайте, і ви отримаєте.
Дейв Шерохман

@Dave спасибі! Але схоже, Кріс ненавидів це. Ну добре, життя продовжується ...
Крегокс

Це справді вперше про це запитували? Я очікував, що це буде закрито як дублікат.
Ерік Б

Відповіді:


45

Шкірлива річ називається «тильда».

Він розширюється до вашого домашнього каталогу.

Спробуйте

echo ~
echo $HOME

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

Дивіться bash Tilde Expansion .


8
Порівняння вище, хоча є дійсним, можливо, вводить в оману: tilde працює лише під час інтерпретації оболонки в сценарії та в командному рядку. Змінна середовища, $ 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

3
Ще одне, що потрібно пам’ятати: розширення Tilde - це робота оболонки або файлового менеджера, це не функція самої файлової системи Linux. Таким чином, він часто не працюватиме у файлах конфігурації, а додавання лапок навколо "~" це зупинить його розширення в оболонці.
Grumbel

3
Слід також зазначити, що домашні каталоги не обов'язково лежать в / home, тому не слід вважати, що ~ розширюється на / home / [моє ім’я користувача] або що ~ bob розширюється на / home / bob
darkliquid

Дякуємо за пропозицію @Grumbel. І дякую @PriceChild за додавання до пропозиції @ darkliquid!
Wuffers

10

І в обох # 1 & # 2: ~ - ваш домашній каталог, тому, якщо ви qwerty, це, швидше за все, буде каталог / home / qwerty. Тож спробуйте ls ~це побачити.

Для №1: мені здається, що служба змінної визначається як ваш домашній каталог.

Це означає, що після # 2 переміщено файл tgz з підкаталогу Desktop у ваш домашній каталог, №3 потім зміниться в домашній каталог.


5

Схоже, команди виконують наступне.

  1. Призначте змінну, яку називають службою, до місцевої домашньої папки, наприклад:

    /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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.