为了账号安全,请及时绑定邮箱和手机立即绑定

Bash 脚本 `function` 怎样捕获带空格的参数?

Bash 脚本 `function` 怎样捕获带空格的参数?

开心每一天1111 2019-04-23 15:36:02
比如写一个Bash函数,创建并进入一个目录newdirfirst-demo/,用alias无法完成的,可如果我用的是$1进行传参mkdir$1&&cd$1,像newdirsecond\demo/就会出错,结果是创建两个目录,进入到空格前的名字对应的目录.请问怎样能解决这个问题?
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

对bash编程不熟,说个无关的,我认为更广泛的原则是,对于shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则。mkdir'lolomg'
                            
查看完整回答
反对 回复 2019-04-23
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则不过要补充几点:对于你上面的创建并进入一个目录的脚本来说,mkdir$1并不能创建目录seconddemo/,因为Shell传递给脚本的$1是seconddemo,于是mkdir$1相当于mkdirseconddemo,会创建两个目录。所以需要使用双引号,即: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'newdir'$pwd/home/user/etc/newdir
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 317 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信