GNU/Linux >> Linux Esercitazione >  >> Linux

Anteporre e aggiungere una stringa a ogni elemento di $* in Shell?

Sto cercando la soluzione più semplice che prenda $* come input e si espande a ogni elemento con prefisso e suffisso con una determinata stringa:

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

Posso anteporre o aggiungere, ma non entrambi:

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

Non riesco a combinare le due soluzioni. La documentazione afferma che il valore restituito dall'espansione nel parametro parameter=* case è un elenco, ma non sono in grado di usarlo come tale. Voglio passare l'array di valori risultante a un ulteriore comando come argomenti separati, quindi la semplice creazione di una singola stringa non funzionerebbe.

Risposta accettata:

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

Quando eseguito:

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

Linux
  1. Differenza tra shell di accesso e shell non di accesso?

  2. ${!foo} E Zsh?

  3. Shell test per trovare un motivo in una stringa?

  4. Comportamento imprevisto di uno script di shell?

  5. Precedenza degli operatori logici della shell &&, ||?

Come installare e utilizzare Nu Shell su Linux

Slash e backslash in Sed?

Come si aggiunge del testo a un file?

Come invertire un elenco di parole in una stringa di shell?

linux shell wc -c conta caratteri +1

convertire una stringa esadecimale in binario e inviarla con netcat