문서에 따르면:
There are two formats for redirecting standard output and standard
error:
&>word
and
>&word
Of the two forms, the first is preferred. This is semantically equiva-
lent to
>word 2>&1
그러나 다음 명령을 실행하면 다음과 같습니다.
echo abc 2>&1 | tee myfile
abc를 가져와서 파일로 스트리밍합니다.
하지만 함께:
echo abcd 2&>1 | tee myfile
출력이 없으며 빈 문자열이 파일에 삽입됩니다. >&와 &>는 같아야 하지 않나요?
답변1
요약: 셸에서는 bash
및 사이에 차이가 없지만 표시되는 코드의 리디렉션이 다릅니다.>&
&>
첫 번째 코드에서는 2>&1
("표준 출력이 있는 곳으로 표준 오류 리디렉션")을 사용합니다.
2&>1
>&
그런 다음 이것이 if 와 are same 을 사용하는 것과 왜 다른지 묻습니다 &>
.
bash
참고하신 문서는구체적으로리디렉션 연산자 &>word
와 관련하여 >&word
이는 표준 리디렉션과 동일 >word 2>&1
하며 문서에서도 이에 대해 언급합니다. 파일 설명자, 설명서에 작성되지 않은 내용 [n]&>word
또는 [n]>&word
기타 리디렉션 연산자 에 대한 언급이 없습니다 (이 두 리디렉션 연산자가 있기 때문에 이것이 무엇을 의미하는지 명확하지 않습니다).이미표준 입력 및 표준 오류가 암시적으로 포함됩니다.
두 명령 중 두 번째 명령인 using 은 2&>1
이러한 리디렉션 연산자 중 하나를 사용하고 있으며 사용자가 생각하는 대로 해석하지 않습니다. 첫 번째 명령은 뒤에 숫자가 오기 때문에 echo abcd 2>&1
특별한 비표준 리디렉션을 사용하지 않습니다 . >&
매뉴얼에는 다음과 같이 구체적으로 언급되어 있습니다.
두 번째 형식을 사용하는 경우
word
숫자 또는 로 확장되지 않을 수 있습니다-
. 그렇다면 추가적인 리디렉션 연산자가 적용됩니다(참조:파일 설명자 복사 아래) 호환성상의 이유로.
두 번째 명령은 " 두 개의 인수를 사용 하여 호출 하고 stdout 및 stderr을 파일 이름으로 작성합니다 ." 와 echo abcd 2&>1
동일합니다 .echo abcd 2 &> 1
echo
abcd
2
1