将间隔字符串作为参数传递给函数

时间:2016-12-09 18:08:57

标签: linux bash shell sh

我正在尝试制作这样的安装功能:

function call_fedora(){
        yum -y install $1;
}

function network_tools(){
        tools='net-tools traceroute nmap'
        call_fedora $tools;
}

但是当我调用network_tools函数时,只有net-tools作为参数传递给call_fedora。我希望这个电话是:

yum -y install net-tools traceroute nmap

2 个答案:

答案 0 :(得分:3)

Bash实际上将call_fedora整个字符串net-tools traceroute nmap作为一个参数传递。我知道在bash中执行所需操作的一种强大方法是使用数组扩展:

function call_fedora(){
        yum -y install "$@"     # "$@"  means  "$1" "$2" ...
}

function network_tools(){
        tools=(net-tools traceroute nmap "some funky package with spaces")
        call_fedora "${tools[@]}"       
                # keep relationship between array elements and args of call_fedora
}

"$@"表示call_fedora的每个参数都将作为单独的参数传递给yum。双引号意味着参数可以包含空格(这是一个很好的习惯)。

然后,您需要确保将tools作为单独的参数传递给call_fedora。使它们成为一个数组可以很容易地将它们分开。 "${tools[@]}"将每个数组元素作为单独的参数提供,并正确引用(original source)。

编辑正如@chepner在他的comment below中指出的那样,这个用例有更简单,更便携的技术。

答案 1 :(得分:1)

我建议将$1替换为$@