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

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

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

PHP
海绵宝宝撒 2023-05-01 14:10:56
比如写一个 Bash 函数, 创建并进入一个目录 newdir first-demo/, 用 alias 无法完成的,可如果我用的是 $1 进行传参 mkdir $1 && cd $1, 像 newdir second\ demo/ 就会出错,结果是创建两个目录, 进入到空格前的名字对应的目录.
查看完整描述

2 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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

mkdir 'lol omg'


查看完整回答
反对 回复 2023-05-03
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则

不过要补充几点:

  1. 对于你上面的创建并进入一个目录的脚本来说,mkdir $1并不能创建目录second demo/,因为Shell传递给脚本的$1是second demo,于是mkdir $1相当于mkdir second demo,会创建两个目录。所以需要使用双引号,即:mkdir "$1".

  2. 用./newdir执行脚本时,Shell会fork一个子进程并调用exec执行这个脚本,因此cd ..命令改变的是子Shell的PWD,而不会影响到交互式Shell的pwd。

  3. 如果想在当前shell进程执行脚本,可以使用.或者source命令。

脚本如下:

mkdir "$1" && cd "$1"

用source或者. 执行结果:

$ pwd
/home/user/etc
$ source ./a.sh 'new dir'
$ pwd
/home/user/etc/new dir


查看完整回答
反对 回复 2023-05-03
  • 2 回答
  • 0 关注
  • 136 浏览

添加回答

举报

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