Bash gibt tatsächlich call_fedora
die gesamte Zeichenfolge net-tools traceroute nmap
als ein Argument. Ein robuster Weg, ich weiß von der zu tun, was Sie in der Bash wollen, ist die Array-Erweiterung zu verwenden:
function call_fedora(){
yum -y install "[email protected]" # "[email protected]" 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
}
Die "[email protected]"
bedeutet, dass jeder Parameter call_fedora
wird als separater Parameter yum
übergeben werden. Die doppelten Anführungszeichen bedeuten, dass die Parameter Leerzeichen enthalten können (es ist eine gute Angewohnheit).
Dann müssen Sie sicherstellen, dass Ihre tools
als separate Argumente an call_fedora
übergeben werden. Sie zu einem Array zu machen, macht es einfach, sie getrennt zu halten. Die "${tools[@]}"
gibt Ihnen jedes Array-Element als separaten Parameter, richtig zitiert (original source).
Bearbeiten Wie @chepner in seiner comment below zeigt, gibt es einfachere, tragbare Techniken für diesen Anwendungsfall.
Surround '$ 1' mit doppelten Anführungszeichen ('" ') in Ihrer ersten Funktion. Auch" $ tools "mit doppelten Anführungszeichen in Ihrer zweiten Funktion. –
Ich bin mir auch nicht sicher, warum Sie Zeilen mit Semikolons beenden (';')? –
@JonnyHenly Das ist ein guter Rat für richtig entworfene Funktionen, aber das ist hier nicht der Fall.Quoten '$ tools' und' $ 1' werden einfach zu anderen unerwünschten Verhalten führen. – chepner