スクリプトでこのシナリオを使用する場合:
#!/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