如果我在脚本中使用此场景:
#!/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