간단하게하기 위해하고 싶습니다 :
echo cart | assign spo;
echo $spo
출력 : 카트
그러한 assign
응용 프로그램이 있습니까?
대체를 사용 하여이 작업을 수행하는 모든 방법을 알고 있습니다.
A=$( some | command | here )
의 각각 some |
, command |
그리고 here
자신의 라인에.
간단하게하기 위해하고 싶습니다 :
echo cart | assign spo;
echo $spo
출력 : 카트
그러한 assign
응용 프로그램이 있습니까?
대체를 사용 하여이 작업을 수행하는 모든 방법을 알고 있습니다.
A=$( some | command | here )
의 각각 some |
, command |
그리고 here
자신의 라인에.
답변:
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 개 라인).
IFS=
와 사이에 공백이 없어야합니다 read
.
사용하면 이런 식으로 할 수 있습니다 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를 사용하는 것입니다.
mksh
:) echo cart |& while read -p spo; do echo $spo; done
(사용하는 것이 실제로 더 나은 while IFS= read -p -r spo; do…
불구하고)
문제를 올바르게 이해하면 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
cat
습니까?
echo | cat
구조물은 나를 던졌다.
여기에 문제에 대한 해결책이 있습니다.
# 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"