bash - 通过变量向heredoc添加空行

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是空的我会得到一个空行。但是如果它不是空的,
我怎样才能在后面添加一个空行呢?$1

因此,在运行脚本的情况下,如下所示:
bash script.sh hello

我会得到:

this is the first line
hello

this is the last line

我试图通过echo在 中使用第二个来实现这一点if statement,但换行符没有被传递。

答案1

让我们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

答案2

对此有几种解决方案。首先,让我们创建一个包含稍后使用的换行符的变量(在 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

相关内容