GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Jedem Element von $* in der Shell eine Zeichenfolge voranstellen und anhängen?

Ich suche nach der einfachsten Lösung, die $* benötigt als Eingabe und erweitert jedes Element, dem eine bestimmte Zeichenfolge vorangestellt und angehängt ist:

$*=foo bar baz
<solution(x,y)>=xfooy xbary xbazy

Ich kann entweder voranstellen oder anhängen, aber nicht beides:

echo ${*/#/x}
# prints xfoo xbar xbaz
echo ${*/%/y}
# prints fooy bary bazy

Ich kann die beiden Lösungen nicht kombinieren. Die Dokumentation behauptet, dass der Wert, der von der Erweiterung im Fall parameter=* zurückgegeben wird, eine Liste ist, aber ich kann sie nicht als solche verwenden. Ich möchte das resultierende Array von Werten als separate Argumente an einen weiteren Befehl übergeben, daher würde es nicht funktionieren, einfach einen einzelnen String zu erstellen.

Akzeptierte Antwort:

#!/bin/bash
echo $*
FIELDS=("${@/#/x}")
FIELDS=("${FIELDS[@]/%/y}")
echo "${FIELDS[*]}"

Bei Ausführung:

$ t.sh foo bar baz
foo bar baz
xfooy xbary xbazy

Linux
  1. Shell-Test, um ein Muster in einer Zeichenfolge zu finden?

  2. Unerwartetes Verhalten eines Shell-Skripts?

  3. Vorrang der logischen Shell-Operatoren &&, ||?

  4. Shell-Skript mit Funktion und Parameter als Variablen?

  5. Bearbeiten Sie das Shell-Skript, während es ausgeführt wird

So installieren und verwenden Sie Nu Shell unter Linux

Wie füge ich Text an eine Datei an?

Variablenbereich für Bash-Shell-Skripte und Funktionen im Skript

Wie kann man eine Liste von Wörtern in einer Shell-Zeichenfolge umkehren?

Linux-Shell wc -c Zeichenanzahl +1

Konvertieren Sie einen Hex-String in Binär und senden Sie ihn mit netcat