UNIX의 파이핑에서 실행되는 명령


4

내가 명령을 쓸 때

$ echo date  

그런 다음 "날짜"를 인쇄합니다. 즉, 날짜 프로그램을 실행하지 않습니다.
하지만 내가 쓸 때

$ echo date | wc  

날짜가 실행 된 것처럼 정답이 생성됩니다. 여기서 배관은 어떻게 다른가요?
설명 해주십시오.


1
물론, 나는 ... 어쨌든이 repro 수 수없는 것 echo date | wc같은 같은 결과 인 우분투 시스템에 나에게 1-1-5을 제공 wc한 후 입력 date^D.

다시 확인하십시오 :)
Tim Post

1
에코 `date`| wc는 당신이 말하는 결과를 만들어 낼 것입니다. 또는 더 나은 날짜 | 화장실. echo$ () 또는 ''가 쉘에 다른 프로세스의 출력을 원한다고 지시하지 않는 한 그 뒤에 오는 모든 것을 인쇄합니다.
Tim Post

답변:


3
에코 날짜 | 화장실
      1 1 5

바이트 카운터 == 5 (= sizeof ( "date")) 같이 날짜가 실행되지 않은 것 같습니다

그러나

에코 날짜 | xargs 시간

날짜를 명령으로 실행


Ok..date가 실행되지 않고 대신 제공합니다. 날짜의 문자. 그러나 날짜에는 4자가 있으므로 1 1 4를 표시해야합니다. 왜 5를 표시합니까?
Happy Mittal

문자열 "date"뒤에 줄 바꿈 문자가 있기 때문에
Aaron Digulla

그러나 날짜 이후에는 줄 바꿈 문자가 없습니다. 그것은 단순히 날짜입니다. 따라서 'd', 'a', 't'및 'e'만 wc로 전달됩니다.
Happy Mittal

2
echo줄 바꿈을 추가합니다. -n줄 바꿈을 피하기 위해 사용하십시오 .

2

그렇지 않습니다.

시험:

echo date | cat > here.out

그런 다음 시도하십시오.

echo `date` | cat > here.out


:)) 어, 나는 대답을 연마해야한다고 생각합니다.

2
@Aaron Digulla는 - 그는 영업 설명 것과 유사한 파이프를 사용하는 동안이를 증명하려고합니다. 따라서이 경우, cat그것은 쓸모없는 것이 아닙니다 . 질문이 주어지면 합리적인 데모를하기 때문입니다. +1.
Tim Post

0

문제는 'echo'가 다음 텍스트를 표준 출력으로 보냅니다. 이 경우 텍스트는 '날짜'이므로 표시 한 내용이 작동하지 않습니다. 날짜는 이제 에코 텍스트를 생성하기 때문에 echo | date입니다.



0

bash가 문자열을 사용하는 방법과 관련이 있습니다.

그 변수에 무엇이 저장되어 있는지 살펴보면

d1=date
d2="date"
d3='date'
d4=`date`

d1, d2 및 d3은 "date"를 포함하는 문자열 일 뿐이지 만 d4는 실행 된 명령 날짜의 결과를 갖습니다.

그런 다음이 단계를 한 단계 더 진행하여 해당 문자열 사이의 차이점을 찾을 수 있는지 확인하십시오.

d4=`date +%Y%m%d`
echo $d4

그것은 이제 우리가 $ d4에 "20100418"을 저장했음을 의미합니다.

d3='$d4'
echo $d3

이제 $ d3에서 문자열 "$ d4"(정확한 3 자)를 인쇄했습니다.

d2="$d4"
echo $d2

이제 $ d4를 인쇄하고 그 결과를 변수 $ d2에 저장 한 이후 $ d2에 "20100418"이 저장되었습니다.

d1=$d4
echo $d1

그리고 변수 $ d4의 내용을 변수 $ d1에 복사합니다.

이것이 문자열이 어떻게 작동하는지 조금 명확하게하기를 바랍니다.

그리고 지금 당신의 질문으로 돌아갑니다.

cj@zap:~$ echo date | wc
      1       1       5
cj@zap:~$ echo `date` | wc
      1       6      31
cj@zap:~$ date | wc
      1       6      31

이제 실제로 무엇을 의미합니까? 남자 화장실은 우리에게 이것을 제공합니다 :

NAME wc-각 파일의 줄 바꿈, 단어 및 바이트 수를 인쇄합니다

따라서 "1 1 5"는 개행 1 개, 단어 1 개, 문자 5 개가 있고 날짜와 일치한다고 말합니다.

그리고 "1 6 31"은 "sön 18 apr 2010 10.07.25 CEST \ n"과 일치합니다. 왜냐하면 그것은 내 데이트 명령이 나에게 준 것이기 때문입니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.