GNU/Linux >> Tutoriales Linux >  >> Linux

Anteponer y agregar una cadena a cada elemento de $* en Shell?

Estoy buscando la solución más simple que requiera $* como entrada, y se expande a cada elemento precedido y sufijado con una cadena dada:

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

Puedo anteponer o agregar, pero no ambos:

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

No puedo combinar las dos soluciones. La documentación afirma que el valor devuelto por la expansión en el caso de parámetro=* es una lista, pero no puedo usarlo como tal. Quiero pasar la matriz de valores resultante a otro comando como argumentos separados, por lo tanto, simplemente construir una sola cadena no funcionaría.

Respuesta aceptada:

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

Cuando se ejecuta:

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

Linux
  1. ¿Diferencia entre Shell de inicio de sesión y Shell sin inicio de sesión?

  2. Edite el script de shell mientras se está ejecutando

  3. En un shell de Linux, ¿cómo puedo procesar cada línea de una cadena de varias líneas?

  4. ¿Cómo puedo anteponer una cadena al comienzo de cada línea en un archivo?

  5. Bash Shell Script:busque una bandera y tome su valor

Cómo instalar y usar Nu Shell en Linux

¿La secuencia de comandos de Shell se bloquea en el comando de correo?

¿Cómo agrego texto a un archivo?

¿Cómo invertir una lista de palabras en una cadena de shell?

linux shell wc -c cuenta caracteres +1

convertir una cadena hexadecimal a binario y enviar con netcat