HOWTO · Linux
Como concatenar strings no Bash
Aprenda a concatenar strings no Bash: combine valores lado a lado, acrescente texto com +=, monte uma string em um loop e incorpore a saída de comandos. Veja exemplos e entenda como controlar os espaços e preservar valores com aspas.
Nesta página
No Bash, concatene strings colocando valores entre aspas lado a lado ou acrescente texto a uma variável existente com +=. Um espaço só é incluído quando você o coloca no valor atribuído.
Método 1: concatenação básica
Para combinar dois valores, coloque suas expansões entre aspas, uma ao lado da outra. Inclua qualquer separador literalmente entre as aspas:
string1="Hello"
string2="World"
result="$string1 $string2"
printf '%s\n' "$result"
Aqui, result contém Hello World porque há um espaço na atribuição entre $string1 e $string2. Ao passar um valor para um comando, coloque a expansão entre aspas, como em printf '%s\n' "$result"; assim, espaços e caracteres curinga permanecem no valor, sem divisão de palavras nem expansão de nomes de arquivos. As chaves delimitam o nome de uma variável quando o texto adjacente poderia ser interpretado como parte dele: "${string1}_suffix". As variáveis do Bash não têm tipos fixos de string ou inteiro; portanto, um valor que parece numérico também pode ser incluído como texto, por exemplo, com number=42 seguido de label="ID: $number".
Método 2: usando o operador +=
Use += para acrescentar o texto à direita ao valor atual de uma variável:
greeting="Hello"
greeting+=" World"
printf '%s\n' "$greeting"
O espaço inicial em " World" passa a fazer parte do texto acrescentado, então greeting contém Hello World. O operador += atualiza a mesma variável; neste caso, ele acrescenta texto, não realiza uma soma aritmética.
Método 3: concatenando várias strings
Expansões entre aspas e literais adjacentes podem formar um único valor. Coloque os separadores onde forem necessários:
first="Bash"
second="is"
third="great!"
combined="$first $second $third"
printf '%s\n' "$combined"
As três expansões são combinadas na ordem apresentada, e os dois espaços literais da atribuição servem como separadores. Se o formato desejado não tiver espaços, omita-os: o Bash não insere separadores automaticamente.
Método 4: concatenando strings em loops
Acrescente cada item em sequência. Este exemplo coloca um espaço entre os itens e, por isso, evita um espaço sobrando no final:
result=""
separator=""
for word in "Learning" "Bash" "is" "fun"
do
result+="${separator}${word}"
separator=" "
done
printf '%s\n' "$result"
O primeiro item é acrescentado sem separador. Depois de cada item, separator passa a conter um espaço, separando os itens seguintes; assim, o valor final termina em fun. Substitua as palavras entre aspas pelos valores do seu loop. Ao inserir valores que possam conter espaços ou caracteres curinga do shell, mantenha as expansões entre aspas.
Método 5: usando substituição de comando
A substituição de comando, escrita como $(...), executa um comando e insere a saída padrão dele na atribuição ao redor:
name="John"
greeting="Hello, $(printf '%s' "$name")!"
printf '%s\n' "$greeting"
A saída do comando é inserida entre Hello, e !. A substituição de comando remove os caracteres de nova linha finais dessa saída. Coloque os valores entre aspas dentro do comando e também coloque a variável resultante entre aspas ao usá-la como argumento.
Conclusão
Para concatenar no Bash, coloque valores entre aspas lado a lado, acrescente separadores explicitamente ou use += para adicionar texto a um valor existente. Um loop pode repetir essa operação, e $(...) pode inserir a saída de um comando. Ao passar valores para comandos, mantenha as expansões entre aspas para que espaços e caracteres curinga continuem fazendo parte do valor.
Perguntas frequentes
-
Como concatenar duas strings no Bash?
Atribua expansões entre aspas lado a lado, como emcombined="${first}${second}", ou acrescente uma à outra comcombined+="$second". Se o resultado precisar de um espaço, inclua-o no texto entre aspas. -
Posso concatenar strings em um loop?
Sim. Acrescente cada item a uma variável de resultado com+=; se o valor combinado precisar de separadores, adicione-os deliberadamente entre os itens. -
O que é substituição de comando no Bash?
$(...)executa um comando e insere a saída padrão dele no texto ao redor. Os caracteres de nova linha finais dessa saída são removidos. -
Como descobrir o comprimento de uma string?
Use${#value}para obter o comprimento do valor de uma variável do Bash. A contagem de caracteres pode depender da localidade ativa; na localidadeC, a contagem é feita em bytes. -
Posso concatenar strings com caracteres especiais?
Sim. Aspas duplas preservam espaços e impedem a expansão de curingas nos valores das variáveis, mas caracteres da sintaxe do shell, como$, crases e aspas, ainda podem precisar de aspas ou escapes quando digitados literalmente. Para texto arbitrário, escolha uma forma de aspas que impeça o shell de interpretar esses caracteres antes da atribuição.