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

관련 정보