Jglukn
Jglukn

Reputation: 35

use argument containing spaces in bash

I know about escaping, quoting and stuff, but still have a problem.

I you have a script containing "cd $1", and call it with an argument containing spaces, cd will always return an error message - it stops at the first space and can't find the directory. I tried protecting the arguments in every way :

ls -l
+-rwx... script
+drwx... dir with spaces/
cat script
+cd $1

script dir with spaces
+cd: dir: no such file or directory

script "dir with spaces"
+cd: dir: no such file or directory

script dir\ with\ spaces
+cd: dir\: no such file or directory

but none will work.

I feel like I'm missing the obvious, thanks for enlightening me.

Upvotes: 2

Views: 72

Answers (2)

Etan Reisner
Etan Reisner

Reputation: 80921

You need to quote the expansion of "$1" to prevent it from being word split as well as quoting the string passed to the script to prevent it from being word-split.

So

$ cat script.sh
cd -- "$1"
$ ./script.sh "dir with spaces"

Edit: As gniourf_gniourf correctly pointed out using -- as the first argument to cd prevents problems should paths ever start with -.

Upvotes: 2

eduffy
eduffy

Reputation: 40224

Use double quotes on the variable

 cd "$1"

Upvotes: 0

Related Questions