我正在尝试制作这样的安装函数:
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/