GNU/Linux >> Tutoriels Linux >  >> Linux

Ajouter et ajouter une chaîne à chaque élément de $* dans le shell ?

Je cherche la solution la plus simple qui prend $* en entrée, et se développe à chaque élément préfixé et suffixé avec une chaîne donnée :

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

Je peux soit préfixer soit ajouter, mais pas les deux :

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

Je n'arrive pas à combiner les deux solutions. La documentation affirme que la valeur renvoyée par l'expansion dans le cas de parameter=* est une liste, mais je ne peux pas l'utiliser en tant que telle. Je souhaite transmettre le tableau de valeurs résultant à une autre commande en tant qu'arguments séparés. Par conséquent, la simple construction d'une seule chaîne ne fonctionnerait pas.

Réponse acceptée :

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

Lors de l'exécution :

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

Linux
  1. ${!foo} Et Zsh ?

  2. Barre oblique et barre oblique inverse dans Sed ?

  3. Modifier le script shell pendant son exécution

  4. Dans un shell Linux, comment puis-je traiter chaque ligne d'une chaîne multiligne ?

  5. Comment puis-je ajouter une chaîne au début de chaque ligne dans un fichier ?

Comment installer et utiliser Nu Shell sous Linux

Le script shell se bloque sur la commande de messagerie ?

Comment ajouter du texte à un fichier ?

Portée variable pour les scripts shell bash et les fonctions dans le script

Comment inverser une liste de mots dans une chaîne shell ?

convertir une chaîne hexadécimale en binaire et l'envoyer avec netcat