$ a="hello world"
$ echo ${a// /_}
hello_world
Laut bash(1):
${parameter/pattern/string}
Mustersubstitution. Das Muster wird erweitert, um ein Muster zu erzeugen, genau wie bei der Pfadnamenerweiterung. Der Parameter wird erweitert und die längste Übereinstimmung von Muster mit seinem Wert wird durch eine Zeichenfolge ersetzt. Wenn Muster mit / beginnt, werden alle Übereinstimmungen von Muster ersetzt
mit Schnur. Normalerweise wird nur das erste Streichholz ersetzt. Wenn das Muster mit # beginnt, muss es am Anfang des erweiterten Parameterwerts übereinstimmen. Wenn das Muster mit % beginnt, muss es am Ende mit dem erweiterten Wert des Parameters übereinstimmen. Wenn string null ist, werden Musterübereinstimmungen gelöscht und das folgende Muster kann ausgelassen werden. Wenn der Parameter @ oder * ist, wird die Substitutionsoperation der Reihe nach auf jeden Positionsparameter angewendet, und die Erweiterung ist die resultierende Liste. Wenn Parameter eine Array-Variable ist, die mit @ oder * indiziert ist, wird die Substitutionsoperation der Reihe nach auf jedes Mitglied des Arrays angewendet, und die Erweiterung ist die resultierende Liste.
Sie könnten Folgendes versuchen:
str="${str// /_}"