
첫 번째 스타일, 할당할 그룹 2 파이프는 다음과 같이 작동합니다.
$ myresult1=$(curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' 2>/dev/null | jq '.archived_snapshots.closest.url'); echo "$myresult1"
"http://web.archive.org/web/20160622184546/http://stackoverflow.com/"
두 번째 스타일, 두 번째 파이프에만 할당하면 작동하지 않습니다.
$ curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' 2>/dev/null | myresult2=$(jq '.archived_snapshots.closest.url'); echo "$myresult2"
$
그래서 두 번째 스타일을 작동시키는 것이 가능한지, 즉 괄호 할당 내에서 stdin을 읽을 수 있는지 궁금합니다.
답변1
두 번째 명령은 작동합니다. 문제는 사용 중인 bash
쉘이나 모든 파이프라인 구성 요소를 하위 쉘에 배치하는 쉘입니다. myresult2
올바르게 설정되었지만 다음과 같이 동일한 하위 셸에 머무르지 않는 한 변수는 즉시 범위를 벗어납니다.
curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' \
2>/dev/null | {
myresult2=$(jq '.archived_snapshots.closest.url'); echo "$myresult2" ; }
에서 이 명령을 실행하면 ksh
변수 할당이 최상위 셸에서 수행되므로 예상대로 작동합니다.
ksh
또는 다음에서 동작을 가져오도록 lastpipe 옵션을 설정할 수도 있습니다 bash
.
shopt -s lastpipe
대화형 세션에서 이 작업을 수행하려면 작업 제어도 비활성화해야 합니다.
set +m