bash에게 줄이 다음 줄에서 계속된다는 것을 알리는 방법


답변:


130

문자가 백 슬래시입니다. \

로부터 bash는 설명서 :

백 슬래시 문자 '\'는 읽은 다음 문자 및 행 연속에 대한 특별한 의미를 제거하는 데 사용할 수 있습니다.


감사. bash 스크립트 열의 일반적인 제한은 무엇입니까?
길을 엽니 다.

bash에는 흥미로운 열 제한이 없습니다. 명확성을 위해 열당 70-80 자로 제한해야합니다.
Habbie

9
@RyanM 백 슬래시는 줄 끝 문자 앞의 마지막 문자 여야합니다. \ 뒤에 공백이없는 것이 확실합니까?
George

9
@George 그래. 조금 더 조작하면 ^M. 문제는 Windows를 사용하는 사람이 스크립트를 제공 한 것 같습니다. 빠른 dos2unix수정 :)
RyanM

2
@George 귀하의 의견이 방금 저를 구했습니다. \ 뒤에 공백이 있었고 무엇이 잘못되었는지 알아낼 수 없었습니다. 건배!
pledgling

37

일반적으로 명령이 다음 행으로 계속되도록하려면 행 끝에 백 슬래시를 사용할 수 있습니다. 그러나 명령이 묵시적으로 계속되는 경우가 있습니다. 즉, 행이 토큰으로 끝날 때 합법적으로 명령을 종료 할 수없는 경우입니다. 이 경우 셸은 더 많은 정보가 있음을 알고 백 슬래시를 생략 할 수 있습니다. 몇 가지 예 :

# In general
$ echo "foo" \
> "bar"
foo bar

# Pipes
$ echo foo |
> cat
foo

# && and ||
$ echo foo &&
> echo bar
foo
bar
$ false ||
> echo bar
bar

다르지만 관련이있는 것은 따옴표 안의 암시 적 연속입니다. 이 경우 백 슬래시 없이 단순히 문자열에 개행을 추가하는 것입니다.

$ x="foo
> bar"
$ echo "$x"
foo
bar

백 슬래시를 사용 하면 논리 줄을 다시 여러 논리 줄로 분할합니다.

$ x="foo\
> bar"
$ echo "$x"
foobar

명령이 암시 적으로 다음 줄에 계속되는 상황에 대한 공식적인 목록이 있습니까? 특정 상황에서는 백 슬래시를 [[- ]]조건 내에서 제외 할 수 있지만 다른 상황에서는 제외 할 수있는 것 같습니다. 그리고 규칙을 파악하려고합니다.
Menachem

16

\일을합니다. @Guillaume의 답변과 @George의 의견은이 질문에 명확하게 대답합니다. 다음은 The backslash has to be the very last character before the end of line character.이 명령을 고려하는 이유를 설명합니다 .

   mysql -uroot \
   -hlocalhost      

뒤에 공백이 있으면 \줄 연속이 작동하지 않습니다. 그 이유는 \ 보이지 않는 줄 바꿈 문자가 아닌 공백 인 다음 문자에 대한 특별한 의미를 제거하기 때문입니다 . 줄 바꿈 문자는 \이 예에서가 아닌 공백 뒤에 있습니다.


2
"마지막 캐릭터"부분을 지적 해주셔서 감사합니다. 이 버그를 정확히 추적하는 데 약간 실망했습니다.
Jason
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.