다중 에코 호출을 사용하지 않고 Bash에서 다중 행 문자열을 출력하는 방법은 다음과 같습니다.
echo "usage: up [--level <n>| -n <levels>][--help][--version]"
echo
echo "Report bugs to: "
echo "up home page: "
Bash 내장 만 사용 하여이 작업을 수행 할 수있는 휴대용 방법을 찾고 있습니다.
답변
여기서는 종종 이러한 목적으로 문서가 사용됩니다.
cat << EOF
usage: up [--level <n>| -n <levels>][--help][--version]
Report bugs to:
up home page:
EOF
모든 Bash 버전을 포함하여 모든 Bourne 파생 쉘에서 지원됩니다.
답변
또는 당신은 이것을 할 수 있습니다 :
echo "usage: up [--level <n>| -n <levels>][--help][--version]
Report bugs to:
up home page: "
답변
이 페이지의 통찰력있는 답변에서 영감을 얻어 가장 단순하고 유연한 방법을 고려한 혼합 접근법을 만들었습니다. 어떻게 생각해?
먼저 변수에 사용법을 정의하여 다른 컨텍스트에서 재사용 할 수 있습니다. 형식은 제어 문자를 추가 할 필요없이 매우 단순하고 거의 WYSIWYG입니다. 이것은 나에게 합리적으로 휴대용 것 같습니다 (MacOS 및 Ubuntu에서 실행했습니다)
__usage="
Usage: $(basename $0) [OPTIONS]
Options:
-l, --level <n> Something something something level
-n, --nnnnn <levels> Something something something n
-h, --help Something something something help
-v, --version Something something something version
"
그런 다음 간단히 사용할 수 있습니다
echo "$__usage"
또는 매개 변수를 구문 분석 할 때 하나의 라이너로 에코 할 수 있습니다.
levelN=${2:?"--level: n is required!""${__usage}"}
답변
-e
옵션을 사용 \n
하면 문자열에서 줄 바꿈 문자를 인쇄 할 수 있습니다 .
샘플 (하지만 좋은지 아닌지 확실하지 않음)
재밌는 점은 -e
옵션이 여전히 사용 가능하지만 MacOS 매뉴얼 페이지에 설명되어 있지 않다는 것입니다 . 리눅스 매뉴얼 페이지에 설명되어있다 .
답변
printf
의견에서 권장 했으므로 사용법에 대한 몇 가지 예를 제시해야합니다 (사용 메시지를 인쇄하더라도 Dennis 또는 Chris의 답변을 사용할 가능성이 큽니다). printf
보다 사용하기가 조금 더 복잡합니다 echo
. 첫 번째 인수는 형식 문자열이며 이스케이프 (예 🙂 \n
는 항상 해석됩니다. 또한 %
추가 인수가 포함되는 위치 및 방법을 제어하는 형식 지시문을 포함 할 수 있습니다 . 사용법 메시지에 사용하는 두 가지 방법이 있습니다.
먼저 전체 메시지를 형식 문자열에 포함시킬 수 있습니다.
printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: \nup home page: \n"
와 달리 echo
최종 개행 문자를 명시 적으로 포함해야합니다. 또한 메시지에 %
문자 가 포함되어 있으면 로 작성해야 %%
합니다. 버그 리포트와 홈페이지 주소를 포함하고 싶을 경우, 자연스럽게 추가 할 수 있습니다.
printf "usage: up [--level <n>| -n <levels>][--help][--version]\n\nReport bugs to: %s\nup home page: %s\n" "$bugreport" "$homepage"
둘째, 형식 문자열을 사용하여 각 추가 인수를 별도의 줄에 인쇄 할 수 있습니다.
printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: " "up home page: "
이 옵션을 사용하면 버그 리포트 및 홈페이지 주소를 추가하는 것이 매우 분명합니다.
printf "%s\n" "usage: up [--level <n>| -n <levels>][--help][--version]" "" "Report bugs to: $bugreport" "up home page: $homepage"
답변
또한 들여 쓰기 된 소스 코드를 사용하면 <<-
(후행 대시와 함께) 선행 탭을 무시할 수 있지만 선행 공백은 무시할 수 있습니다. 예를 들면 다음과 같습니다.
if [ some test ]; then
cat <<- xx
line1
line2
xx
fi
선행 공백없이 들여 쓰기 된 텍스트를 출력합니다.
line1
line2
답변
@jorge의 솔루션을 사용하고 모든 줄이 같은 줄에 있으면 변수를 따옴표로 묶어야합니다.
echo $__usage
한 줄에 모든 것을 인쇄하지만
echo "$__usage"
줄 바꿈을 유지합니다.