请问怎样能解决这个问题?Bash 脚本 `function` 怎样捕获带空格的参数?

比如写一个 Bash 函数, 创建并进入一个目录 newdir first-demo/, 用 alias 无法完成的,
可如果我用的是 $1 进行传参 mkdir $1 && cd $1, 像 newdir second\ demo/ 就会出错,
结果是创建两个目录, 进入到空格前的名字对应的目录.

海绵宝宝撒
浏览 108回答 2
2回答

神不在的星期二

对bash编程不熟,说个无关的,我认为更广泛的原则是,对于shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则。mkdir 'lol omg'

慕婉清6462132

shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则不过要补充几点:对于你上面的创建并进入一个目录的脚本来说,mkdir $1并不能创建目录second demo/,因为Shell传递给脚本的$1是second demo,于是mkdir $1相当于mkdir second demo,会创建两个目录。所以需要使用双引号,即:mkdir "$1".用./newdir执行脚本时,Shell会fork一个子进程并调用exec执行这个脚本,因此cd ..命令改变的是子Shell的PWD,而不会影响到交互式Shell的pwd。如果想在当前shell进程执行脚本,可以使用.或者source命令。脚本如下:mkdir "$1" && cd "$1"用source或者. 执行结果:$ pwd/home/user/etc$ source ./a.sh 'new dir'$ pwd/home/user/etc/new dir
打开App,查看更多内容
随时随地看视频慕课网APP