이것:
$ 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
핵심은 이것이 0
true를 의미하고 1
(또는 0이 아닌 다른 값)은 false를 의미한다는 것입니다.
셸에서 true인 테스트(또는 성공적으로 완료된 프로그램)는 코드 0으로 종료됩니다. 테스트는 비어 있으면 [[ -z "$VAR" ]]
코드 0(true)을 반환 $VAR
하고 비어 있지 않으면 코드 1(false)을 반환합니다.
$ var=""; [[ -z "$var" ]]; echo $?
0
$ var="NOT EMPTY"; [[ -z "$var" ]]; echo $?
1
요약하면, $VAR
null이 아닌 경우 [[ -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