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