Mohamed ِRadwan
Mohamed ِRadwan

Reputation: 797

How to assign a directory / path / folder with a space in the name to a Bash variable?

How can I add a path with a space in a Bash variable in .bashrc? I want to store some variables in .bashrc for paths and I encountered a path with a space in it.

I tried to add it between ' ' or use the escape character \, but it didn't help:

games=/run/media/mohamedRadwan/games\ moves    # this doesn't work
games='/run/media/mohamedRadwan/games  moves'  # or this
games="/run/media/mohamedRadwan/games  moves"  # or this

... when I run:

mount $games

... it throws an error indicating that it's only trying to mount /run/media/mohamedRadwan/games.

But when I run echo $games, it shows the full value, /run/media/mohamedRadwan/games moves.

How can I solve this?

Upvotes: 33

Views: 32222

Answers (2)

bishop
bishop

Reputation: 39494

mount /dev/sda9 "$games"

As mentioned, always quote variable dereferences. Otherwise, the shell confuses the spaces in the variable's value as spaces separating multiple values.

Upvotes: 28

Nahuel Fouilleul
Nahuel Fouilleul

Reputation: 19335

When variable contains spaces, variable expansion and then word splitting will result to many arguments, echo command will display all arguments but other program or function may handle arguments another way.

Surrounding variable with double quotes will prevent arguments to be splitted

printf "'%s'\n" $games

printf "'%s'\n" "$games"

Upvotes: 5

Related Questions