What does the little squiggly ~ do in Linux?

25

3

I have two instances of it being used and I am wondering what each does:

  1. service=~

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

What does the little squiggly ~ do?

Then, after that that, what would cd $service do?

O_O

Posted 2011-04-05T21:48:17.400

Reputation: 1 473

3this so deserves a tag [squiggly] – cregox – 2011-04-06T07:25:43.463

3Tilde, is shell specific and not specific for linux. – David Allan Finch – 2011-04-06T08:40:51.597

@Cawas: Ask, and ye shall receive. – Dave Sherohman – 2011-04-06T09:17:33.627

@Dave thanks! But seems like Chris hated it. Oh well, life goes on... – cregox – 2011-04-06T11:44:44.697

Is this really the first time this has been asked? I expected this to be closed as a duplicate. – Erik B – 2011-04-06T20:42:01.027

Answers

45

The squiggly thing is called a "tilde".

It expands to your home directory.

Try

echo ~
echo $HOME

Both statements put your home directory by itself on a line..

See bash Tilde Expansion for details.

Mikel

Posted 2011-04-05T21:48:17.400

Reputation: 7 890

8The comparison above, while valid, is perhaps misleading: the tilde only works during shell interpretation in scripts and at the command line. The environment variable, $HOME, however, works anywhere an environment variable works - which is a lot more places. – Mei – 2011-04-06T14:44:55.817

36

The "squiggly" is called a tilde. It is used to refer to your home directory which on Linux, is normally /home/username. It is also stored in the $HOME environment variable. Expanding the ~ to the location of the home directory is the job of the shell (like zsh or bash) or file manager (like Nautilus) and not the filesystem or OS its self.

You can also use this to refer to another user's home directory. For instance, if the other user's username is bob, you could refer to their home directory with ~bob, which will be expanded to /home/bob/.

The first example you've given sets the variable service to ~, so it corresponds to your home directory. This is equivalent to service=/home/username or service=$HOME.

The second example copies the file ~/Desktop/Service$version.tgz (or /home/username/Desktop/Service$version.tgz) to /home/username. This command is equivalent to:

mv ~/Desktop/Service$version.tgz ~

or

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

or

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

The third will change the current working directory ($PWD) to /home/username/. This is equivalent to:

cd /home/username/

or

cd $HOME

Wuffers

Posted 2011-04-05T21:48:17.400

Reputation: 16 645

3One additional thing to keep in mind: Tilde expansion is the job of the shell or the filemanager, it is not a function of the Linux filesystem itself. Thus it often won't work in configuration files and adding quotes around "~" it will stop its expansion in the shell. – Grumbel – 2011-04-06T08:58:59.873

3It should also be noted that home directories don't necessarily lie in /home so it shouldn't be assumed that ~ expands to /home/[my user name] or that ~bob expands to /home/bob – darkliquid – 2011-04-06T09:13:01.260

Thanks for the suggestion @Grumbel. And Thanks @PriceChild for adding in @darkliquid's suggestion! – Wuffers – 2011-04-06T12:24:03.087

10

In both #1 & #2: ~ is your home directory, so if you are qwerty it will likely be the directory /home/qwerty. So try ls ~ to see that.

For #1: it looks to me like the variable service is being defined as your home directory.

That means after #2 has moved the tgz file from the Desktop subdirectory to your home directory, #3 then changes to the home directory.

nomaderWhat

Posted 2011-04-05T21:48:17.400

Reputation: 111

5

It looks like the commands are doing the following.

  1. Assign a variable called service to your home folder location, for example:

    /home/user
    
  2. It moves the file from your desktop to the top level of your home directory, for example:

    /home/user/Desktop/Service$version.tgz $service
    
  3. The script then changes the directory to the top level of the home directory.

So, all the script is doing is just cleaning up your desktop by moving the file to your /home/user folder instead.

James

Posted 2011-04-05T21:48:17.400

Reputation: 51

1

I'll add here that ~user also expands to [user]'s home directory, so it's not just a shortcut for your own home directory.

E.g.:

[guy@abox anotherdir]$ cd ~ 
[guy@abox ~]$ pwd
/home/guy
[guy@abox ~]$ cd ~john
[guy@abox john]$ pwd
/home/john

Rooke

Posted 2011-04-05T21:48:17.400

Reputation: 139