명령의 출력을 변수에 저장하는 방법은 무엇입니까? 이렇게 하고 있는데 아무것도 저장되어 있지 않습니다. 파이프에 문제가 있는 것 같은데 디버깅 방법을 모르겠습니다.
이는 예상대로 작동합니다.
$ var=$(printf "hello \n world")
$ echo $var
hello world
이와 같이:
$ printf "hello \n world" | wc -l
1
다음은 수행되지 않습니다.
$ var=$(printf "hello \n world" | wc -l)
$ echo $var
$ #previous command returns nothing
세 번째 예에서는 어떻게 저장합니까 var
?1
편집하다:Cygwin에서 bash를 사용합니다.
편집 2:함께 달리다bash -x
$ bash -x
+ [[ -z '' ]]
+ CYG_SYS_BASHRC=1
+ [[ himxBH != *i* ]]
+ export 'EXECIGNORE=*.dll'
+ EXECIGNORE='*.dll'
+ PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '
+ [[ himxBH != *i* ]]
$ var=$(printf "hello \n world" | wc -l)
+ var=
$ echo $var
+ echo
편집 3:
$ bash --version
GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
편집 4:
set +o posix
제안대로@Georgevasiliu내 답변에 대한 댓글(현재 중재자가 삭제하고 아래에 복사함)의 출력은 변경되지 않습니다.
어떤 이유로 백틱 구문이 나에게는 작동하지만 작동 $(...)
하지 않습니다.
$ var=`printf "hello \n world" | wc -l`
++ printf 'hello \n world'
++ wc -l
+ var=1
$ echo $var
+ echo 1
1
누군가 이런 일이 발생하는 이유와 더 중요한 문제 해결 방법을 설명할 수 있다면 이 답변이 허용되는 답변이어야 합니다.
답변1
[제안된 대로 링크 요약을 추가하도록 편집됨] 이는 Cygwin을 일부 소프트웨어와 함께 사용하여 Windows에서 이상하게 작동한다는 사실과 관련이 있습니다. 문제가 있는 소프트웨어 목록을 BLODA라고 합니다. 자세한 내용은 아래 링크를 확인하세요.
첫 번째 링크는 BLODA의 공식 Cygwin 정의입니다. 일반적으로 바이러스 백신 유형의 소프트웨어는 프로세스가 fork()를 수행하거나 파일 또는 메모리 영역에 액세스할 때와 같은 다양한 후크를 구현합니다. 이러한 소프트웨어는 Cygwin과 bash가 제대로 작동하는 것을 방해하며, 해결 방법은 Cygwin의 설치 디렉터리에 예외를 추가하여 검사를 비활성화하거나 소프트웨어를 완전히 비활성화/제거하는 것입니다.
두 번째 링크는 이 기사의 작성자가 설명한 것과 정확히 일치하는 메일링 목록 질문으로 연결되며 누군가 Cygwin FAQ의 BLODA 섹션에 대한 질문에 답변했습니다.