com ksh93
:
VAR2=${VAR//+([^[:space:]])/.file1}
Mesmo com zsh
:
set -o extendedglob
VAR2=${VAR//(#m)[^[:space:]]##/$MATCH.file1}
POSIXly:
VAR2=$(printf '%s\n' "$VAR" | sed 's/[^[:space:]]\{1,\}/&.file1/g')
(atente para os caracteres de nova linha se houver em $VAR
).
Todos eles substituem sequências de um ou mais caracteres ( +(...)
, ##
, \{1,\}
) diferentes dos espaços em branco ( [^[:space:]]
) pela mesma coisa ( ,
$MATCH
, &
) e .file1
acrescentados.
Ou você pode dividir e participar se não se importar em preservar a quantidade de espaço em branco entre palavras e palavras separadas apenas por SPC, TAB e NL (e não por outros caracteres de espaço em branco):
unset IFS # default IFS of SPC+TAB+NL
set -o noglob # disable glob
set -- $VAR # split+glob without glob
for i do
set -- "$@" "$i.file1" # add suffix
shift
done
VAR2="$*" # join with space
Com shells com suporte à matriz, você pode querer usar uma variável de matriz em vez de uma variável escalar. Com rc
/ es
/ zsh
/ ksh93
/ bash
/ mksh
/ yash
:
VAR=(XYZ YZA ZAB)
Em seguida, adicionar .file1
a cada elemento (que neste momento pode conter espaço em branco) é apenas uma questão de:
VAR2=($VAR^.file1) # rc, es
VAR2=($^VAR.file1) # zsh
VAR2=("${VAR[@]/*/VAR2=${VAR//+([^[:space:]])/.file1}
.file1}") # ksh93
VAR2=("${VAR[@]/%/.file1}") # bash