GNU/Linux >> Znalost Linux >  >> Linux

Připojit a připojit řetězec ke každému prvku $* v Shell?

Hledám nejjednodušší řešení, které zabere $* jako vstup a expanduje na každý prvek s předponou a příponou s daným řetězcem:

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

Mohu provést buď předřazení nebo připojení, ale ne obojí:

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

Nemohu obě řešení zkombinovat. Dokumentace tvrdí, že hodnota vrácená rozšířením v případě parametru =* je seznam, ale nemohu ji jako takovou použít. Chci předat výsledné pole hodnot dalšímu příkazu jako samostatné argumenty, proto by jednoduché vytvoření jediného řetězce nefungovalo.

Přijatá odpověď:

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

Při spuštění:

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

Linux
  1. Rozdíl mezi přihlašovacím prostředím a nepřihlašovacím prostředím?

  2. ${!foo} A Zsh?

  3. Neočekávané chování skriptu Shell?

  1. Přednost logických operátorů Shell &&, ||?

  2. Shell skript s funkcí a parametrem jako proměnnými?

  3. Skript Shell visí na příkazu Mail?

  1. Jak obrátit seznam slov v řetězci shellu?

  2. linuxový shell wc -c počet znaků +1

  3. převést hex řetězec na binární a odeslat pomocí netcat