zsh 和bash 下面的函数传参

在bash下面,函数传参只有简单的替代。所以下面的函数

1
2
3
4
5
#!/bin/bash

function myfunc () {
echo $1
}

在如下的调用中

1
2
# myvar="var with space"
# myfunc $myvar

会被替换成

1
myfunc var with space

于是,输出结果就成了var 而不是我们所期待的var with space

而在zsh下面,我们发现我们能够获得我们期待的结果。

1
2
3
4
5
6
7
8
9
#!/bin/zsh

function myfunc () {
echo $1
}

# myvar="var with space"
# myfunc $myvar
#=> var with space

那么bash里面如何同样获得我们期待的结果呢? 很简单,把参数quote起来就是了。

1
2
# myfunc "$myvar"
#=> var with space

另外,通过$@可以获取所有传给函数的参数。所以上面的函数echo $@也是可以的。

总之,多注意一下是否需要quote就是了。