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の2番目のものを使用してこれを達成しようとしていますが、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

関連情報