내부 명령으로 문장을 어떻게 계속합니까


12

예를 들어 스크립트 파일에 "현재 온라인 상에 10 명이 있습니다"라고 말하려고했습니다.

다음 줄에 "현재 온라인 상에있는 사람들"부분 없이는 명령이 제대로 작동하지 않는 것 같습니다.

현재 나는

w='who | wc -l' 
echo "There are $w people online at the moment" 

그러나 나는 항상 출력으로 끝납니다.

There are who | wc -l users online at the moment 

중간에서 명령이 어떻게 작동합니까? 예제를보고 복사하려고했지만 명령 대체 문제를 해결하지 못하는 것 같습니다.

답변:


20

당신은 출력을 원한다

who | wc -l

w문자열이 아닌에 할당되었습니다 . 따옴표로 인해 얻는 것입니다. 당신은 명령 대체를 사용해야합니다 $(...):

w=$(who | wc -l)
echo "There are $w people online at the moment"

(역 따옴표를 사용할 수도 있지만 쉽게 중첩 할 수는 없습니다).


Bash를 포함한 일부 쉘에서는 역 따옴표를 중첩시킬 수 있습니다. 중첩 이스케이프가 필요합니다. stackoverflow.com/a/2657037/776723
ShadSterling

1
@Polyergic 감사합니다. 내 대답을 업데이트했지만 내 $()자신 을 내포하는 것으로 생각합니다 ;-)
Anthon

10

다른 해결책 :

echo There are $(who | wc -l) people online at the moment


5

backtick를 사용하여 명령을 실행해야합니다

w=`who | wc -l` echo "There are $w people online at the moment"



7
유효한 포인트. "백틱은 또한 작은 따옴표와 혼동되기 쉽다." 여기서 무슨 일이 있었는지.
가니 마

@ 가니 마 : 참으로! 이 질문은 왜 백틱을 피해야 하는지를 설명해야 할 때 좋은 예입니다. :)
PM 2Ring

나는 OP가 실수를 한 곳을 정확히 설명 한 유일한 사람이기 때문에이 답변 만 상향 조정했습니다 . 백틱이 좋든 나쁘 든 그냥 부수적 인 메모입니다.
Ruslan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.