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 
  • Использование «$ {a: -b}» для назначения переменных в скриптах
  • Как я могу объединить переменную оболочки с другими другими параметрами в моих командных строках?
  • Как передать переменную в sftp?
  • Объединение нескольких выходов grep в переменную
  • Область переменных в while-read-loop на Solaris
  • bash - определяющие переменные с VAR = $ {: - по умолчанию}
  • Как сопоставить текст между строкой и пробелом
  • шаблон awk с переменной в скрипте bash
  • Как сохранить статус последнего выхода после теста
  • Запустите команду, сохраненную в переменной, чтобы эхо в файл
  • Использование sed в сценарии оболочки с многострочными переменными
  • Linux и Unix - лучшая ОС в мире.