我知道逃避,引用和填充,但仍有问题。
我有一个包含“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
但没有一个可行。
我觉得我错过了那个显而易见的东西,谢谢你的启发。
答案 0 :(得分:2)
你需要引用"$1"
的扩展来防止它被分词以及引用传递给脚本的字符串以防止它被分词。
所以
$ cat script.sh
cd -- "$1"
$ ./script.sh "dir with spaces"
编辑:正如gniourf_gniourf使用--
正确指出cd
作为-
的第一个参数,可以防止问题路径始于{{1}}。
答案 1 :(得分:0)
在变量上使用双引号
cd "$1"