“&>”와 “>&”의 차이점

“&>”와 “>&”의 차이점

문서에 따르면:

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 &> 1echoabcd21

관련 정보