답변:
cp a b && mv b c && rm a &
맞다. &
보다 우선 순위가 낮습니다 &&
. 실제로 &
는 ;
개행 문자 이외의 것보다 우선 순위가 낮습니다. 와 &
동일한 구문 범주 ;
에 있습니다. 차이점 ;
은 명령 목록을 포 그라운드에서 &
실행 하고 백그라운드에서 실행합니다. 이것을 직접 테스트 할 수 있습니다.
$ dash -c 'sleep 2 && echo waited & echo backgrounded'
backgrounded
$ waited
pdksh, ksh93, bash, csh, tcsh와 동일합니다.
zsh는 예외적으로 호환되지 않습니다. 이 설명서에 설명되어 있습니다 .
하위 목록이 종료 된 경우
&
,&|
또는&!
, 쉘은 백그라운드에서 그것의 마지막 파이프 라인을 실행하고, 완료 (백그라운드에서 전체 하위 목록을 실행 다른 조개의 차이에주의)까지 기다리지 않습니다.
불행히도 zsh는 sh 또는 ksh 호환 모드에서도 이러한 방식으로 작동합니다. 전체 명령이 백그라운드에서 실행되도록하려면 괄호 나 괄호를 묶습니다. 괄호는 서브 쉘을 작성하지만 중괄호는 그렇지 않지만, 배경 명령이 서브 쉘에 있기 때문에 이것은 일부 쉘에서 마이크로 최적화를 제외하고는 관련이 없습니다.
{ cp a b && mv b c && rm a; } &
(cp a b && mv b c && rm a )&
체인 전체를 포함하는 것처럼 패러 틴에 넣을 수 있습니다 .
{ ... ; }
보면 선호하는 형식 이라고 생각 합니다.
{ ... ; } &
동안, 현재 프로세스 수준에서 포크을( ... ) &
서브 쉘에서 포크를 할 ... 결과는 동일하지만 미묘한 차이가 어쨌든있다.