Конкатенация нескольких строковых переменных с помощью новой строки - PullRequest
2 голосов
/ 20 апреля 2020

У меня есть две переменные var1 и var2, которые могут состоять из нескольких строк или могут быть полностью пустыми. Например, любой из них может выглядеть так:

line/1
line/2

или


Я хочу объединить их так, чтобы при объединении выводов var1 как есть, а выводов var 2 как правильно ниже последней строки var1. Существует 4 случая: либо var1 пуст, а var2 нет, var 2 пуст, а var 1 нет, оба пусты или не пусты. Я не хочу никаких пробелов или пустой строки, если одна из переменных пуста. Поэтому, если переменная 1 пуста, я не хочу,


line/1

или наоборот.

Кроме использования блока if, elif, else, есть ли способ, которым я мог бы сделать это, или я ДОЛЖЕН использовать блок if else.

Кроме того, для последнего случая, когда ни один из них не пуст, как я могу объединить эти два? Я пытался

var3="${var1}\n${var2}" 

, но это не похоже на работу. Любые советы будут высоко оценены.

Ответы [ 3 ]

2 голосов
/ 20 апреля 2020

Используя bash, вы можете использовать эту функцию для этого задания:

concat() {
   printf '%s' "${1:+$1$'\n'}" "${2:+$2$'\n'}";
}

Использование "${1:+$1$'\n'}" добавляет \n к $1, только если $1 равно нулю / не установлено.

Согласно man bash:

${parameter:+word} Использовать альтернативное значение. Если параметр равен нулю или не установлен, ничто не заменяется, в противном случае подставляется расширение слова.

Примеры:

concat 'line1' 'line2'

line1
line2

concat 'line1' ''

line1

concat '' 'line2'

line2

concat '' ''

concat 'line1
line2
line3' ''

line1
line2
line3
1 голос
/ 20 апреля 2020
var3="$var1${var1:+${var2:+$'\n'}}$var2"

должно работать.

$ var1=; var2=; var3="${var1}${var1:+${var2:+$'\n'}}${var2}"; echo "$var3"
               # empty line from echo
$ var1=1; var2=; var3="${var1}${var1:+${var2:+$'\n'}}${var2}"; echo "$var3"
1
$ var1=; var2=2; var3="${var1}${var1:+${var2:+$'\n'}}${var2}"; echo "$var3"
2
$ var1=1; var2=2; var3="${var1}${var1:+${var2:+$'\n'}}${var2}"; echo "$var3"
1
2

  • ${var1} - поставить var1
  • ${var1:+ - когда установлен var1 и
    • ${var2:+ - когда установлено var2
      • $'\n' - затем добавить новую строку
    • }
  • }
  • ${var2} - и добавьте также var2.

В основном ${var1:+${var2:+$'\n'}} добавляет символ новой строки, только если var1 и var2 оба установлены для разделения var1 и var2.

Для справки bash ручное расширение параметров оболочки .

1 голос
/ 20 апреля 2020

Вы можете попробовать использовать printf -v

printf -v var3 '%s\n "$var1" "$var2"
...