比如写一个 Bash 函数, 创建并进入一个目录 newdir first-demo/, 用 alias 无法完成的,可如果我用的是 $1 进行传参 mkdir $1 && cd $1, 像 newdir second\ demo/ 就会出错,结果是创建两个目录, 进入到空格前的名字对应的目录.
2 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
对bash编程不熟,说个无关的,我认为更广泛的原则是,对于shell有特殊含义的字符,在使用的时候还是应该用引号,这应该是shell通用的原则。
mkdir 'lol omg'
慕婉清6462132
TA贡献1804条经验 获得超2个赞
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
- 2 回答
- 0 关注
- 136 浏览
添加回答
举报
0/150
提交
取消