2010-05-17 4 views

답변

6

문제 echo에서 재 입력으로 read 명령을 실행하기 위해, 새로운 서브 쉘 프로세스가 양산되고 있다는 점이다. 이 프로세스는 값을 읽고이를 변수에 할당 한 다음 종료합니다. 두 번째 echo 명령이 실행됩니다. 당신이 서브 쉘에서 두 번째 echoread 둘 다 할 수있는이 방법을 설명하기 위해 :

$ echo "a b c d" | (read X Y Z V; echo $X) 
a 
5

나는 echo "a b c d" | read X Y Z Vecho $X이 분리 된 진술 (나는 정확한 용어가 확실하지 않기 때문에)이라고 생각한다. 그래서 하나는 다른 것을 알지 못합니다.

편집 : 시도 echo "a b c d" | (read X Y Z V; echo $X) 줘 ...

6

배쉬에서, 당신은 그것을 달성하기 위해 서로 다른 몇 가지 작업을 수행 할 수 있습니다

여기 문자열 :

여기

read X Y Z V < <(echo "a b c d"); echo $X 

A :

read X Y Z V <<< $(echo "a b c d"); echo $X 

프로세스 대체 명령 대체를 사용하는 문서 :

read X Y Z V <<EOF 
$(echo "a b c d") 
EOF 
echo $X 

이 문서 방법은 Bash 외에도 POSIX 셸에서도 작동합니다.

다른 명령의 출력 대신 파일에서 읽는 경우 조금 더 간단합니다.

+0

추가해야 할 또 하나 : echo a b c d | 읽는 동안 X Y Z V; do echo $ X; done –

+0

@ 잔 : 문제는 질문과 같습니다. while 루프 이후에는 while 루프가 서브 쉘을 생성하기 때문에 값은 사라진다. –

+0

예, 대부분의 경우 루프 내에서 변수 만 필요합니다. –

관련 문제