在bash中使用包含空格的参数

时间:2015-02-13 13:52:34

标签: bash

我知道逃避,引用和填充,但仍有问题。

我有一个包含“cd $ 1”的脚本,并使用包含空格的参数调用它,cd将始终返回错误消息 - 它在第一个空格处停止并且找不到该目录。我试图以各种方式保护论点:

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

但没有一个可行。

我觉得我错过了那个显而易见的东西,谢谢你的启发。

2 个答案:

答案 0 :(得分:2)

你需要引用"$1"的扩展来防止它被分词以及引用传递给脚本的字符串以防止它被分词。

所以

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

编辑:正如gniourf_gniourf使用--正确指出cd作为-的第一个参数,可以防止问题路径始于{{1}}。

答案 1 :(得分:0)

在变量上使用双引号

 cd "$1"