bash 지식을 향상하고 코드를 더 체계적으로 만들려고 노력 중입니다.
여기서 하고 싶은 것은 변수가 존재하는 경우에만 $user 변수에 -u 플래그를 추가하고, 그렇지 않으면 -u 플래그를 언급하지 않는 것입니다.
이것이 내가 시도한 것입니다.
echo "Running: ps if [[ -n "$user"]]; then -u $user fi | wc -l"
$user가 존재하면 $user가 소유한 프로세스 수를 인쇄합니다.
단, $user가 존재하지 않는 경우에는 전체 사용자의 처리량만 표시됩니다.
(에코 내에서) 이것이 필요하다는 점을 기억하는 것이 중요합니다.
답변1
echo
이 경우에는 필요하지 않으며 echo
어떤 경우에는 데이터가 수정될 수도 있으므로 출력 변수 데이터를 사용하지 않겠습니다 .왜 printf가 echo보다 나은가요?). 또한 명령 대체가 필요하고 따라서 쉘이 일시적으로 ps
출력을 메모리에 보관해야 하기 때문에 덜 우아합니다.
대신, 읽을 수 있도록 다음과 같은 코드를 작성할 수 있습니다.
echo Running:
if [ -n "$user" ]; do
ps -u "$user"
else
ps
fi
또는 읽을 수 없는 덩어리로 압축하기 시작하려면,
echo Running:
ps ${user:+-u "$user"}
변수가 설정되어 있고 비어 있지 않은 경우 확장은 ${variable:+word}
으로 확장됩니다. 변수를 설정할 때 제거 대상은 다음으로만 확장됩니다(비어 있을 수도 있음). 이 확장은 표준이므로 POSIX와 유사한 모든 쉘이 이를 지원합니다.word
variable
:
word
어떤 이유로든 한 줄에 작성하고 싶다면 다음과 같이 한 줄에 작성하세요.
echo Running:;ps ${user:+-u "$user"}
또는 if-then-else 변형을 사용하세요.
echo Running:;if [ -n "$user" ]; do ps -u "$user"; else ps; fi