POSIX 및 Bash(sh의 약자)는 복합 if 문에 사용됩니다.

POSIX 및 Bash(sh의 약자)는 복합 if 문에 사용됩니다.

나는 sh속기로 명령을 실행하는 것을 선호하고 POSIX를 사용하는 것을 선호합니다. 솔직히 말해서 스크립트가 Dash에서 실행될 수 있다면 그것으로 충분합니다. 이는 [확장 명령이 아닌 테스트 명령을 사용한다는 의미입니다 [[.

확실하지 않은 자동 시작 스크립트의 예가 있습니다.

if which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS"; then
   eval `dbus-launch --sh-syntax --exit-with-session`
fi

그래서 내 생각 에는 dbus-launchsum이 $DBUS_SESSION_BUS_ADDRESS비어 있으면 실행하십시오 eval. 이것을 어떻게 단축할 수 있습니까? 이 주제에 대한 도움을 주시면 감사하겠습니다.

답변1

귀하가 게시한 코드 조각은 POSIX 합법적이며 dash있는 그대로 잘 작동합니다. s를 제거하고 한 줄의 코드로 바꾸는 것이 의미가 없다고 생각합니다 if. 왜냐하면 때때로 코드를 읽기 어렵게 만드는 것 외에는 별 역할이 없기 때문입니다. 하지만 이 경우에는 한 줄이므로 간단히 , if를 제거 ; then하고 , 즉 로 fi바꾸면 됩니다.; then&&

which dbus-launch >/dev/null && test -z "$DBUS_SESSION_BUS_ADDRESS" && 
eval `dbus-launch --sh-syntax --exit-with-session`

질문의 스니펫과 기능적으로 동일해야 합니다. 또한, 이것이 "속기"가 의미하는 바라면, 이는 일반적이거나 표준적인 용어가 아니며 입력 문자를 너무 많이 절약하지도 못한다고 생각합니다. 복합 명령을 if목록으로 변환더 정확한 설명이 될 것입니다.

관련 정보