我有两个变量var1
和var2
,它们可能是多行,也可能是完全空的。例如,任何一个都可能像这样:
line/1
line/2
或
我想将它们连接起来,以便将var1按原样输出时,将var 2按原样输出到var1的最后一行下面。有4种情况,var1为空,var2不为空,var 2为空,var 1不为空,两者均为空,或都不为空。如果变量之一为空,我不希望有任何空格或空行。因此,如果var 1为空,我不要,
line/1
,反之亦然。
除了使用if,elif,else块以外,还有其他方法可以执行此操作,或者是否必须使用if,else块。
此外,对于最后一个都不为空的情况,如何将这两个连接起来?我尝试过
var3="${var1}\n${var2}"
但这似乎不起作用。任何提示将不胜感激。
答案 0 :(得分:2)
使用bash
,可以将此功能用于此作业:
concat() {
printf '%s' "${1:+$1$'\n'}" "${2:+$2$'\n'}";
}
只有在"${1:+$1$'\n'}"
为空/未设置的情况下,使用\n
会将$1
附加到$1
。
根据man bash
:
${parameter:+word}
使用备用值。如果参数为null或未设置,则不替换任何内容,否则替换单词的扩展名。
示例:
concat 'line1' 'line2'
line1
line2
concat 'line1' ''
line1
concat '' 'line2'
line2
concat '' ''
concat 'line1
line2
line3' ''
line1
line2
line3
答案 1 :(得分:2)
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
。
答案 2 :(得分:1)
您可以尝试使用printf -v
printf -v var3 '%s\n "$var1" "$var2"