쉘 스크립트에서 긴 명령 분할

쉘 스크립트에서 긴 명령 분할

저는 Unix 쉘 스크립트를 작성해 왔지만 올바른 형식에 대한 경험이 없습니다. 단일 명령을 실행하기 위해 긴 줄을 작성해야 하는 상황이 많이 있습니다.

문제는 하나의 긴 쉘 명령 줄을 여러 줄로 분할하지만 단일 명령으로 실행되도록 하는 방법이 있습니까?

답변1

단일 간단한 명령의 긴 줄은 다음과 같이 개행 문자를 이스케이프 처리하여 분할할 수 있습니다.

rsync --archive --itemize-changes \
    "$source" \
    "$target"

백슬래시는 해당 줄의 마지막 문자여야 합니다.

POSIX 표준의 관련 비트:

2.2.1 이스케이프 문자(백슬래시)

따옴표가 없는 A는 <backslash>a를 제외한 후속 문자의 리터럴 값을 유지해야 합니다 <newline>. 가 <newline>뒤에 오면 <backslash>쉘은 이를 줄 연속으로 해석합니다. 입력을 토큰으로 <backslash>분할하기 전에 제거해야 합니다. <newline>이스케이프 문자는 <newline>입력에서 완전히 제거되고 공백으로 대체되지 않으므로 토큰 구분 기호로 사용할 수 없습니다.

파이프 또는 및/또는 목록 등과 같은 단일 복합 명령 내에는 이스케이프할 필요가 없는 개행 문자에 대한 자연스러운 지점이 있는 경우가 많습니다( 및 &&는 명령 종결자이므로).|||

[ -e "$pathname" ] &&
printf 'Removing %s\n' "$pathname" &&
rm -- "$pathname"
awk -f script.awk <infile |
grep -e "$pattern" |
cat header.txt - >result.txt

답변2

긴 문자열을 더 작고 읽기 쉬운 구성 요소로 나누거나 후행 "\"를 사용하여 줄 바꿈을 나타냅니다.

"남자 난교"에서:

\<newline>쌍이 발생하고 백슬래시 자체가 따옴표로 묶이지 않으면 줄 \<newline>연속으로 처리됩니다(즉, 입력 스트림에서 제거되어 사실상 무시됩니다).

관련 정보