Bash 참/거짓 테스트의 논리는 무엇입니까?

Bash 참/거짓 테스트의 논리는 무엇입니까?

이것:

$ echo $VAR
something

이:

$ [[ -z "$VAR" ]]
$ echo $?
1

그러나 이것은:

if [[ -z "$TMUX_MAN_PANE" ]]; then
   echo 'NEVER PRINTS!'

이로 인해 내 머리가 망가졌습니다.

고쳐 쓰다

다음은 실제 코드입니다. 나는 그것을 작동시킬 수 없습니다.

tmux_man_page() {
if [[ "$TERM" =~ 'screen' ]] && [[ -n "$TMUX" ]]; then
  tmux list-panes -t $TMUX_MAN_PANE &> /dev/null
  echo $?
  echo $TMUX_MAN_PANE
  [[ -z "$TMUX_MAN_PANE" ]]
  echo $?
  if ! [[ -z "$TMUX_MAN_PANE" ]] && [[ $? ]]; then
    echo luck
    tmux -q respawn-pane -k -t $TMUX_MAN_PANE man $1
  else
    echo fuck
    tmux split-window -vf man $1
    TMUX_MAN_PANE=$(tmux display-message -p "#{pane_id}")
    export TMUX_MAN_PANE
    tmux select-pane -t {last}
  fi
fi
}

업데이트 2: 성공

마침내 알아 냈습니다. if 문에서 첫 번째 행의 상태를 가져오는 데 문제가 있습니다. if 문의 첫 번째 줄에서 tmux 문의 출력을 얻으려면 몇 가지 트릭을 수행해야 합니다. 이 작업을 수행하는 더 깔끔한 방법을 아는 사람이 있다면 모두 귀를 기울일 것입니다.

작업 코드는 다음과 같습니다.

tmux_man_page() {
if [[ "$TERM" =~ 'screen' ]] && [[ -n "$TMUX" ]]; then
  fucker=$(tmux list-panes -t $TMUX_MAN_PANE 2>&1)
  if ! [[ -z "$TMUX_MAN_PANE" ]] && ! [[ $fucker =~ 'find pane' ]]; then
    tmux -q respawn-pane -k -t $TMUX_MAN_PANE man $1
  else
    tmux split-window -vf man $1
    TMUX_MAN_PANE=$(tmux display-message -p "#{pane_id}")
    export TMUX_MAN_PANE
    tmux select-pane -t {last}
  fi
fi
}

tmux_man_page_close() {
  if [ $TMUX_MAN_PANE ]; then
     tmux kill-pane -t $TMUX_MAN_PANE
  fi
}

답변1

핵심은 이것이 0true를 의미하고 1(또는 0이 아닌 다른 값)은 false를 의미한다는 것입니다.

셸에서 true인 테스트(또는 성공적으로 완료된 프로그램)는 코드 0으로 종료됩니다. 테스트는 비어 있으면 [[ -z "$VAR" ]]코드 0(true)을 반환 $VAR하고 비어 있지 않으면 코드 1(false)을 반환합니다.

$ var=""; [[ -z "$var" ]]; echo $?
0
$ var="NOT EMPTY"; [[ -z "$var" ]]; echo $?
1

요약하면, $VARnull이 아닌 경우 [[ -z "$VAR" ]]false(returns 1)이고 then명령문이 실행되지 않습니다.

변수가 null이 아닌 경우 테스트에서 true를 반환하도록 하시겠습니까? 그렇다면 -z다음으로 바꾸십시오 -n.

$ var=""; [[ -n "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ -n "$var" ]]; echo $?
0

-n간결하게 하기 위해 생략된 경우에도 동일한 테스트가 수행됩니다.

$ var=""; [[ "$var" ]]; echo $?
1
$ var="NOT EMPTY"; [[ "$var" ]]; echo $?
0

관련 정보