150

I want append to a string so that every time I loop over it, it will add "test" to the string.

Like in PHP you would do:

$teststr = "test1\n"
$teststr .= "test2\n"
echo = "$teststr"

Returns:

test1
test2

But I need to do this in a shell script

Mint
  • 14,388
  • 30
  • 76
  • 108

7 Answers7

265

In classic sh, you have to do something like:

s=test1
s="${s}test2"

(there are lots of variations on that theme, like s="$s""test2")

In bash, you can use +=:

s=test1
s+=test2
lleaff
  • 4,249
  • 17
  • 23
William Pursell
  • 204,365
  • 48
  • 270
  • 300
33
$ string="test"
$ string="${string}test2"
$ echo $string
testtest2
ghostdog74
  • 327,991
  • 56
  • 259
  • 343
16
#!/bin/bash
message="some text"
message="$message add some more"

echo $message

some text add some more

Jim
  • 321
  • 1
  • 2
  • 6
15
teststr=$'test1\n'
teststr+=$'test2\n'
echo "$teststr"
Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
3
VAR=$VAR"$VARTOADD(STRING)"   
echo $VAR
Manuelsen
  • 41
  • 1
2

thank-you Ignacio Vazquez-Abrams

i adapted slightly for better ease of use :)

placed at top of script

NEW_LINE=$'\n'

then to use easily with other variables

variable1="test1"
variable2="test2"

DESCRIPTION="$variable1$NEW_LINE$variable2$NEW_LINE"

OR to append thank-you William Pursell

DESCRIPTION="$variable1$NEW_LINE"
DESCRIPTION+="$variable2$NEW_LINE"

echo "$DESCRIPTION"
n1ce-0ne
  • 21
  • 3
  • Why not just do `DESCRIPTION="${variable1}\n${variable2}\n"` ? Seems like a cleaner way to achieve the same thing, unless I'm missing something. – Mint Sep 16 '20 at 00:33
  • there is a difference, ive just tested it. with that method i need -e if im to echo it, with what i suggested you don't. so theirs deffo a difference! – n1ce-0ne Sep 17 '20 at 02:02
1
#!/bin/bash

msg1=${1} #First Parameter
msg2=${2} #Second Parameter

concatString=$msg1"$msg2" #Concatenated String
concatString2="$msg1$msg2"

echo $concatString 
echo $concatString2
Danila Ganchar
  • 10,266
  • 13
  • 49
  • 75
Aditya
  • 11
  • 2