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