UFO ET IT

명령 출력을 변수에 할당

ufoet 2021. 1. 6. 20:01
반응형

명령 출력을 변수에 할당


저는 유닉스를 처음 접했고 쉘 스크립트를 작성하고 있습니다.

명령 프롬프트에서이 줄을 실행하면 일치하는 총 프로세스 수를 인쇄합니다.

ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'

예를 들어, 위 줄의 출력은 명령 프롬프트에서 2입니다.

위 줄 (2)의 출력이 변수에 할당되는 쉘 스크립트를 작성하고 싶습니다.이 변수는 나중에 if 문에서 비교에 사용됩니다.

나는 같은 것을 찾고있다

output= `ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'`
echo $output

그러나 내가 그것을 실행하면 2를 예상하고 있지만 출력을 찾을 수 없다는 메시지가 표시됩니다. 도와주세요.


다음 $과 같은 기호 를 사용할 수 있습니다 .

OUTPUT=$(expression)

시험:

output=$(ps -ef | awk '/siebsvc –s siebsrvr/ && !/awk/ { a++ } END { print a }'); echo $output

명령을 래핑 $( )하면 명령 자체를 "output"이라는 변수로 설정하는 대신 해당 명령을 실행하도록 쉘 지시합니다. (백틱`command`를 사용할 수도 있습니다.)

명령 대체에 대해 자세히 알아 보려면 http://tldp.org/LDP/abs/html/commandsub.html적극 권장 합니다.

또한 1_CR이 주석에서 올바르게 지적했듯이 등호와 할당 사이의 추가 공백으로 인해 실패합니다. 다음은 경험하고있는 동작에 대한 내 컴퓨터의 간단한 예입니다.

jed@MBP:~$ foo=$(ps -ef |head -1);echo $foo
UID PID PPID C STIME TTY TIME CMD

jed@MBP:~$ foo= $(ps -ef |head -1);echo $foo
-bash: UID: command not found
UID PID PPID C STIME TTY TIME CMD

여러 줄 / 다중 명령으로 수행하려면 다음을 수행 할 수 있습니다.

output=$( bash <<EOF
#multiline/multiple command/s
EOF
)

또는:

output=$(
#multiline/multiple command/s
)

예:

#!/bin/bash
output="$( bash <<EOF
echo first
echo second
echo third
EOF
)"
echo "$output"

산출:

first
second
third

참조 URL : https://stackoverflow.com/questions/20688552/assigning-the-output-of-a-command-to-a-variable

반응형