Bash

bash - 通過變數將空行添加到heredoc

  • October 1, 2017

如果我在腳本中使用這種場景:

#!/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它不是空的情況下添加一個空行?

因此,在執行腳本的情況下,例如:

bash script.sh hello

我會得到:

this is the first line
hello

this is the last line

echo我試圖通過在 中使用第二個來實現這一點if statement,但換行符沒有通過。

讓我們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

引用自:https://unix.stackexchange.com/questions/395484