How to split strings over multiple lines in Bash?

前端 未结 11 1099
[愿得一人]
[愿得一人] 2020-11-29 16:35

How can i split my long string constant over multiple lines?

I realize that you can do this:

echo "continuation \\
lines"
>continuation li         


        
相关标签:
11条回答
  • 2020-11-29 17:35

    This is what you may want

    $       echo "continuation"\
    >       "lines"
    continuation lines
    

    If this creates two arguments to echo and you only want one, then let's look at string concatenation. In bash, placing two strings next to each other concatenate:

    $ echo "continuation""lines"
    continuationlines
    

    So a continuation line without an indent is one way to break up a string:

    $ echo "continuation"\
    > "lines"
    continuationlines
    

    But when an indent is used:

    $       echo "continuation"\
    >       "lines"
    continuation lines
    

    You get two arguments because this is no longer a concatenation.

    If you would like a single string which crosses lines, while indenting but not getting all those spaces, one approach you can try is to ditch the continuation line and use variables:

    $ a="continuation"
    $ b="lines"
    $ echo $a$b
    continuationlines
    

    This will allow you to have cleanly indented code at the expense of additional variables. If you make the variables local it should not be too bad.

    0 讨论(0)
  • 2020-11-29 17:35

    Line continuations also can be achieved through clever use of syntax.

    In the case of echo:

    # echo '-n' flag prevents trailing <CR> 
    echo -n "This is my one-line statement" ;
    echo -n " that I would like to make."
    This is my one-line statement that I would like to make.
    

    In the case of vars:

    outp="This is my one-line statement" ; 
    outp+=" that I would like to make." ; 
    echo -n "${outp}"
    This is my one-line statement that I would like to make.
    

    Another approach in the case of vars:

    outp="This is my one-line statement" ; 
    outp="${outp} that I would like to make." ; 
    echo -n "${outp}"
    This is my one-line statement that I would like to make.
    

    Voila!

    0 讨论(0)
  • 2020-11-29 17:36

    This isn't exactly what the user asked, but another way to create a long string that spans multiple lines is by incrementally building it up, like so:

    $ greeting="Hello"
    $ greeting="$greeting, World"
    $ echo $greeting
    Hello, World
    

    Obviously in this case it would have been simpler to build it one go, but this style can be very lightweight and understandable when dealing with longer strings.

    0 讨论(0)
  • 2020-11-29 17:40

    You can use bash arrays

    $ str_array=("continuation"
                 "lines")
    

    then

    $ echo "${str_array[*]}"
    continuation lines
    

    there is an extra space, because (after bash manual):

    If the word is double-quoted, ${name[*]} expands to a single word with the value of each array member separated by the first character of the IFS variable

    So set IFS='' to get rid of extra space

    $ IFS=''
    $ echo "${str_array[*]}"
    continuationlines
    
    0 讨论(0)
  • 2020-11-29 17:40

    In certain scenarios utilizing Bash's concatenation ability might be appropriate.

    Example:

    temp='this string is very long '
    temp+='so I will separate it onto multiple lines'
    echo $temp
    this string is very long so I will separate it onto multiple lines
    

    From the PARAMETERS section of the Bash Man page:

    name=[value]...

    ...In the context where an assignment statement is assigning a value to a shell variable or array index, the += operator can be used to append to or add to the variable's previous value. When += is applied to a variable for which the integer attribute has been set, value is evaluated as an arithmetic expression and added to the variable's current value, which is also evaluated. When += is applied to an array variable using compound assignment (see Arrays below), the variable's value is not unset (as it is when using =), and new values are appended to the array beginning at one greater than the array's maximum index (for indexed arrays) or added as additional key-value pairs in an associative array. When applied to a string-valued variable, value is expanded and appended to the variable's value.

    0 讨论(0)
提交回复
热议问题