줄 연속을 더 잘 입력하는 방법은 무엇입니까?

줄 연속을 더 잘 입력하는 방법은 무엇입니까?

일반적으로 다음과 같이 별도의 줄에 긴 명령을 입력합니다.

myapp -a foooooooo1          \
      -b foooo2              \
      -c foooooooooooooooo3  \
      -d foooooooo4          \
          bar

하지만 나는 그것을 다음과 같이 바꾸고 싶습니다.

myapp  -a foooooooo1  
    \  -b foooo2
    \  -c foooooooooooooooo3
    \  -d foooooooo4
          bar

첫 번째 코드 부분을 변경할 때 백슬래시가 서로 올바르게 정렬되도록 수동으로 조정해야 하기 때문에 이 작업을 수행하고 싶습니다. 두 번째 코드 부분에서는 매개변수 중 하나를 변경해도 백슬래시가 움직이지 않습니다.

답변1

쉘 명령에서 따옴표가 없는 백슬래시는 다음 문자를 이스케이프합니다. 다르게 말하면 다음 문자에 특별한 의미가 있는 경우 백슬래시가 해당 문자의 특별한 의미를 제거한다는 것입니다.

개행 문자는 ;다른 문자와 마찬가지로 명령 종결자입니다. 백슬래시는 개행 문자에서 해당 기능을 제거하여 명령이 다음 줄에서 계속될 수 있도록 합니다. 그건 그렇고, 계속되어야 하는 줄 끝의 백슬래시 뒤에 공백 문자를 가질 수 없는 이유는 백슬래시가 실제 개행 문자를 이스케이프하지 않기 때문입니다.

쉘은 제안한 코드를 올바르게 구문 분석할 수 없습니다. 대신, 각 행을 별도의 명령으로 실행하려고 시도합니다.

쉘이 배열(예: bashhas)을 지원하는 경우 어떤 경우에 유용할 수 있는 또 다른 접근 방식은 다음과 같이 명령을 배열에 저장하는 것입니다.

mycommand=(
    myapp -a 'foo foo'  
          -b 'bar bar'
          -c 'baz baz'
          -d 'qux qux'
              bar
)

이 배열 할당의 개행 문자는 공백과 마찬가지로 배열 요소 사이의 구분 기호로만 사용됩니다. 포함된 공백이 필요한 요소는 예제에 표시된 대로 인용되어야 합니다(어떤 경우에도 명령줄에서 인용되어야 하는 것과 마찬가지로).

이 명령을 실행하려면 다음을 사용할 수 있습니다.

"${mycommand[@]}"

큰따옴표는 다음과 같습니다.기초적인. 배열의 각 요소가 개별적으로 참조되도록 합니다.

또는 매개변수에 대한 배열을 사용하세요.

myapp_args=(
    -a 'foo foo'  
    -b 'bar bar'
    -c 'baz baz'
    -d 'qux qux'
        bar
)

그런 다음:

myapp "${myapp_args[@]}"

관련 정보