IF 문을 사용할 때 쉘 명령을 여러 줄로 나누려면 어떻게해야합니까?
명령이 if
명령문의 일부일 때 쉘에서 여러 행으로 명령을 분할하려면 어떻게 해야합니까?
이것은 작동합니다 :
if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1
fi
작동하지 않습니다.
# does not work:
if ! fab --fabfile=.deploy/fabfile.py \
--forward-agent \
--disable-known-hosts deploy:$target; then
rc=1
fi
전체 명령을 실행하는 대신 다음을 얻습니다.
./script.sh: line 73: --forward-agent: command not found
더 중요한 것은 Bash에 대한 이해에서 누락되어 향후에 이와 비슷한 문제를 이해하는 데 도움이되는 것이 무엇입니까?
백 슬래시 다음과 줄 바꿈 앞에 공백 (공백 또는 탭 문자)이 있으면 줄 연속이 실패합니다. 그러한 공백이 없으면 예제가 잘 작동합니다.
$ cat test.sh
if ! fab --fabfile=.deploy/fabfile.py \
--forward-agent \
--disable-known-hosts deploy:$target; then
echo failed
else
echo succeeded
fi
$ alias fab=true; . ./test.sh
succeeded
$ alias fab=false; . ./test.sh
failed
주석에서 일부 세부 사항이 승격되었습니다. 쉘의 행 연속 백 슬래시는 실제로 특별한 경우가 아닙니다. 백 슬래시는 바로 뒤 따르는 문자를 "인용"하여 일반적으로 적용되는 특수한 처리를 방지하는 일반적인 규칙의 예입니다. 이 경우 다음 문자는 개행 문자이며 특수 처리가 금지되어 명령이 종료됩니다. 일반적으로 인용 된 문자는 명령에 문자 그대로 포함됩니다. 백 슬래시 줄 바꿈은 대신 완전히 삭제됩니다. 그러나 그렇지 않으면 메커니즘은 동일합니다. 백 슬래시는 바로 뒤 따르는 문자 만 인용합니다. 해당 문자가 공백 또는 탭인 경우 인용 된 공백 또는 탭을 가져 오며 후속 줄 바꿈은 인용되지 않은 상태로 유지됩니다.
Windows / WSL / Cygwin 등 사용자의 경우 :
줄 끝이 표준 Unix 줄 바꿈인지 확인하십시오 \n
( 예 : (LF)).
\r\n
CRLF ( Windows 줄 끝 ) 줄 끝을 사용하면 명령 줄이 끊어집니다.
가지고 있기 때문이다 \
윈도우 라인으로 변환을 끝나는 줄 끝에 \
\r
\n
.
마크가 위에서 올바르게 설명했듯이 :
백 슬래시 다음과 줄 바꿈 앞에 공백이 있으면 줄 연속이 실패합니다.
여기에는 공백 ( ) 또는 탭 (
\t
)뿐만 아니라 캐리지 리턴 ( \r
)도 포함됩니다.
'Programming' 카테고리의 다른 글
StackPanel의 아이들이 최대 공간을 아래쪽으로 채우도록하는 방법은 무엇입니까? (0) | 2020.03.04 |
---|---|
sys.stdout.write와 print의 차이점은 무엇입니까? (0) | 2020.03.04 |
jQuery를 사용하여 입력 텍스트의 값을 설정하는 방법 (0) | 2020.03.04 |
github의 특정 줄 번호에 연결하는 방법 (0) | 2020.03.04 |
System.out.println ()에 대한 JUnit 테스트 (0) | 2020.03.04 |