bash – добавить пустую строку в heredoc через переменную

Если я использую этот сценарий в скрипте:

#!/bin/bash addvline=$(if [ "$1" ]; then echo "$1"; echo; fi) cat << EOF this is the first line $addvline this is the last line EOF 

если $1 – emty, я получаю пустую строку.
Но как я могу добавить пустую строку после $1 для случая, когда это не emty?

Таким образом, в случае запуска скрипта:
bash script.sh hello

Я бы получил:

 this is the first line hello this is the last line 

Я попытался добиться этого, используя второе echo в if statement , но новая строка не проходит.

2 Solutions collect form web for “bash – добавить пустую строку в heredoc через переменную”

Пусть, if решите установить содержимое переменной, чтобы не использовать подстановку команд.

 if [ "$1" ]; then addvline=$1$'\n'; fi 

Затем:

 #!/bin/bash if [ "$1" ]; then addvline=$1$'\n'; fi cat << EOF this is the first line $addvline this is the last line EOF 

Для этого есть несколько решений. Сначала давайте создадим переменную, которая содержит новую строку, которая будет использоваться позже (в bash):

 nl=$'\n' 

то он может быть использован для построения переменной, подлежащей печати:

 #!/bin/bash nl=$'\n' if [ "$1" ]; then addvline="$1$nl" else addvline="" fi cat << EOF this is the first line $addvline this is the last line EOF 

Или вы могли бы избежать, if полностью, если используете правильное расширение параметра:

 #!/bin/bash nl=$'\n' addvline="${1:+$1$nl}" cat << EOF this is the first line $addvline this is the last line EOF 

Или в одном более простом коде:

 #!/bin/bash nl=$'\n' cat << EOF this is the first line ${1:+$1$nl} this is the last line EOF 
  • Как добавить текст в переменную в make-файле?
  • Объем переменных при вызове функции из find
  • Проверьте, содержит ли строка строку подстроки
  • Вставка переменных в команду в сценарии оболочки
  • отображение PID
  • команда `read` не работает в Makefile
  • Развертывание Jenkins не передается переменной java
  • Разделить команду и аргументы и вставить в переменную в сценарий bash
  • Столкновение видимых переменных переменных
  • захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров
  • Попытка присвоения не переменной?
  • Linux и Unix - лучшая ОС в мире.