Differences between revisions 8 and 10 (spanning 2 versions)
Revision 8 as of 2009-12-30 08:27:15
Size: 1427
Editor: MatthiasPopp
Comment:
Revision 10 as of 2018-07-06 10:01:46
Size: 1604
Editor: 83
Comment: Added howto concatenate arrays
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
{{{
    var=$var1$var2
{{{#!highlight bash
var=$var1$var2
Line 11: Line 11:
{{{
    var="$var1 - $var2"
{{{#!highlight bash
var="$var1 - $var2"
Line 17: Line 17:
{{{
    var=$var1/.-
{{{#!highlight bash
var=$var1/.-
Line 23: Line 23:
{{{
    var=${var1}xyzzy
    # Without braces, var1xyzzy would be interpreted as a variable name
{{{#!highlight bash
var=${var1}xyzzy
# Without braces, var1xyzzy would be interpreted as a variable name
Line 27: Line 27:
    var="$var1"xyzzy
    # Alternative syntax
var="$var1"xyzzy
# Alternative syntax
Line 33: Line 33:
{{{
    logname="log.$(date +%Y-%m-%d)"
{{{#!highlight bash
logname="log.$(date +%Y-%m-%d)"
Line 39: Line 39:
{{{
    string="$string more data here"
{{{#!highlight bash
string="$string more data here"
}}}

Concatenating arrays is also possible:

{{{#!highlight bash
var=( "${arr1[@]}" "${arr2[@]}" )
Line 45: Line 51:
{{{
    string+=" more data here" # EXTREMELY non-portable!
{{{#!highlight bash
string+=" more data here" # EXTREMELY non-portable!

How can I concatenate two variables? How do I append a string to a variable?

There is no (explicit) concatenation operator for strings (either literal or variable dereferences) in the shell; you just write them adjacent to each other:

   1 var=$var1$var2

If the right-hand side contains whitespace characters, it needs to be quoted:

   1 var="$var1 - $var2"

If you're appending a string that doesn't "look like" part of a variable name, you just smoosh it all together:

   1 var=$var1/.-

Otherwise, braces or quotes may be used to disambiguate the right-hand side:

   1 var=${var1}xyzzy
   2 # Without braces, var1xyzzy would be interpreted as a variable name
   3 
   4 var="$var1"xyzzy
   5 # Alternative syntax

CommandSubstitution can be used as well. The following line creates a log file name logname containing the current date, resulting in names like e.g. log.2004-07-26:

   1 logname="log.$(date +%Y-%m-%d)"

There's no difference when the variable name is reused, either. A variable's value (the string it holds) may be reassigned at will:

   1 string="$string more data here"

Concatenating arrays is also possible:

   1 var=( "${arr1[@]}" "${arr2[@]}" )

Bash 3.1 has a new += operator that you may see from time to time:

   1 string+=" more data here"     # EXTREMELY non-portable!

It's generally best to use the portable syntax.


CategoryShell

BashFAQ/013 (last edited 2018-07-06 10:01:46 by 83)