linux - 将带空格的字符串作为参数传递给函数

标签 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

最佳答案

Bash 实际上将整个字符串 net-tools traceroute nmap 作为一个参数传递给 call_fedora。我知道在 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。双引号意味着参数可以包含空格(这是一个好习惯)。

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

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

关于linux - 将带空格的字符串作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41066401/

相关文章:

linux - 将 bash shell 变量传递给 Makefile?

linux - 是否可以在 bash 脚本中在运行时更改其内容?

php - Shell 脚本 "read"函数 - 不是有效的标识符

linux - 如何在 bash 中读取带有冒号的文本文件

regex - 使用 unix sed 替换 js 路径

linux - 如何通过 linux 命令行将复杂的代码插入到文件中?

c - 无法从多播组获取数据

linux - 绕过 block 层/设备上的 4KB block 大小限制

linux - aplay 命令中的混淆。

sql - 如何将sql查询结果转换为csv格式