Eu tenho uma variável VAR="XYZ YZA ZAB"
declarada e gostaria de acrescentar algumas strings ao lado de todas as palavras dessa variável.
Por exemplo: quero anexar .file1
a cada substring separada por espaço em XYZ YZA ZAB
.
A saída da variável deve ser como abaixo, sem qualquer for loop
ou nada.
VAR="XYZ.file1 YZA.file1 ZAB.file1"
Tenho certeza que awk
pode ser usado, mas não estou ciente de como usá-lo para essa finalidade.
Com
ksh93
:O mesmo com
zsh
:POSIXly:
(cuidado, pois remove caracteres de nova linha à direita, se houver em
$VAR
).Todos eles substituem sequências de um ou mais caracteres (
+(...)
,##
,\{1,\}
) que não sejam espaços em branco ([^[:space:]]
) pela mesma coisa (\1
,$MATCH
,&
) e.file1
anexados.Ou você pode dividir e juntar se não se importar em preservar a quantidade de espaço em branco entre as palavras e as palavras são separadas apenas por SPC, TAB e NL (e não outros caracteres de espaço em branco):
Com shells com suporte a array, você pode querer usar uma variável de array em vez de uma escalar. Com
rc
/es
/zsh
/ksh93
/bash
/mksh
/yash
:Em seguida, adicionar
.file1
a cada elemento (que desta vez pode conter espaço em branco) é apenas uma questão de:A solução simples será usar o recurso de divisão de shell (com um padrão
IFS
):Entenda que isso reduzirá os espaços/guias repetidos em um e removerá os espaços em branco à esquerda e à direita.
set -f
Isso evitará problemas com nomes de arquivos que contenham caracteres glob ( )* ? or [
. A string impressa neste caso terá um espaço adicional.Com
zsh
, aqui está um caminho um pouco mais curto que o de Stéphane:=
executa a divisão de palavras da string e depois^
"distribui" o sufixo para cada palavra.http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion