태그 보관물: variable

variable

파이프는 변수를 할당 출력 : 카트 그러한 assign응용 프로그램이

간단하게하기 위해하고 싶습니다 :

echo cart | assign spo;
echo $spo  

출력 : 카트

그러한 assign응용 프로그램이 있습니까?

대체를 사용 하여이 작업을 수행하는 모든 방법을 알고 있습니다.



답변

echo cart | { IFS= read -r spo; printf '%s\n' "$spo"; }

한 줄만 출력 하면 작동합니다 ( echo후행 줄 바꿈 문자없이 출력을 spo변수에 저장) echo.

당신은 항상 할 수 있습니다 :

assign() {
  eval "$1=\$(cat; echo .); $1=\${$1%.}"
}
assign spo < <(echo cart)

다음 솔루션은 bash스크립트에서는 작동 하지만 bash프롬프트 에서는 작동 하지 않습니다 .

shopt -s lastpipe
echo cat | assign spo

또는:

shopt -s lastpipe
whatever | IFS= read -rd '' spo

whatever의 첫 번째 NUL 문자까지 의 출력을 저장하려면 ( bash변수는 NUL 문자를 저장할 수 없습니다) $spo.

또는:

shopt -s lastpipe
whatever | readarray -t spo

출력 저장할 whatever하여$spo 배열 (어레이 요소마다 1 개 라인).


답변

사용하면 이런 식으로 할 수 있습니다 bash .

echo cart | while read spo; do echo $spo; done

불행히도 변수 “spo”는 while-do-do-one 루프 외부에 존재하지 않습니다. while 루프 안에서 원하는 것을 얻을 수 있다면 효과가 있습니다.

실제로 ATT ksh (pdksh 또는 mksh가 아님) 또는 멋진 zsh에서 위에서 작성한 내용을 거의 정확하게 수행 할 수 있습니다.

% echo cart | read spo
% echo $spo
cart

따라서 또 다른 해결책은 ksh 또는 zsh를 사용하는 것입니다.


답변

문제를 올바르게 이해하면 stdout을 변수에 파이프하려고합니다. 적어도 그것은 내가 찾고 있었고 여기에서 끝났습니다. 내 운명을 공유하는 사람들을 위해 :

spa=$(echo cart)

cart변수에 할당 합니다 $spa.


답변

현재 파이프 스트림을 출력하려면을 사용하십시오 cat.

echo cart | cat 

명령 체인을 계속하려면 tee명령을 사용 하여 출력을 에코하십시오.

echo cart | tee /dev/tty | xargs ls

별명을 사용하여 명령을 단축 할 수 있습니다.

alias tout='tee /dev/tty'
echo cart | tout | xargs ls

답변

여기에 문제에 대한 해결책이 있습니다.

# assign will take last line of stdout and create an environment variable from it
# notes: a.) we avoid functions so that we can write to the current environment
#        b.) aliases don't take arguments, but we write this so that the "argument" appears
#            behind the alias, making it appear as though it is taking one, which in turn
#            becomes an actual argument into the temporary script T2.
# example: echo hello world | assign x && echo %x outputs "hello world"
alias assign="tail -1|tee _T1>/dev/null&&printf \"export \\\$1=\$(cat _T1)\nrm _T*\">_T2&&. _T2"

답변