2011-09-05 2 views
1

파이프에서 출력을 캡처하여 변수에 저장하려고합니다. subshell 사용하기 : var = $ (computeOutput) computeOutput 함수 자체가 출력과 동일한 범위에 저장해야하는 다른 변수를 설정하기 때문에 작동하지 않습니다. 서브 쉘을 사용하면 다른 변수는 서브 쉘의 로컬 사본에 설정되지만 부모 쉘에는 설정되지 않습니다. 내가 생각파이프에서 출력을 캡처하여 변수에 저장하십시오.

하나 개의 솔루션은 다음

감안할 기능 ...

기능 storeOutput() { VAR = $ (고양이) }

... 때 다음을 수행하십시오 ...

echo "hello"| storeOutput; 에코 $ var에

나는 나는 목록을 얻을 스크립트 내부에서 대신 올바른 결과를 얻는이 기능을 사용하면

는 ... "안녕하세요", VAR의 값은,

그러나 콘솔에 인쇄되어 현재 디렉토리의 내용 참고 Mac 포트가 설치된 Mac OSX를 사용하고 있습니다.

아무도 왜 이것이 일어나고 있는지 설명 할 수 있습니까 ??? 또는 여전히 더 나은 해결책을 더 제공하십시오.

+0

'var = $ (cat)'이해야 할 일이 무엇인지 명확하게 밝히지 않았습니다. 단순한 코드를 실재로 게시하고 비 기능적 예제를 제공해야합니다. – Lynch

+0

cat에 인수를 제공하지 않으면 std-in을 취하여 해당 데이터를 std-out으로 전달한다는 것을 기억하십시오. 하위 쉘은 표현식 $ (cat)의 상위 쉘에서 std-in을 상속하며 결과는 "$"덕분에 상위 쉘에 의해 텍스트로 해석됩니다. 이 텍스트는 할당 var = $ (cat)의 오른쪽에 사용됩니다. 파이프에서 출력을 캡처하는 방법. – murungu

답변

1

문제 해결 : 스크립트에서 다중 출력을 storeOutput 함수로 파이핑 중입니다. var의 값을 출력 할 때 "$ var"와 같이 큰 따옴표로 묶지 않으므로 출력의 일부를 ls와 같은 명령으로 간주한다고 가정합니다.

storeOutput() {var = $ (cat)}는 작동하는 것처럼 보입니다