这个:
$ 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
}
关键是这
0
意味着真和1
(或任何其他非零值)意味着假。在 shell 中,为真的测试(或成功完成的程序)以代码 0 退出。如果为空,则测试
[[ -z "$VAR" ]]
返回代码 0 (true),如果$VAR
不为空,则返回代码 (false):总之,如果
$VAR
非空,[[ -z "$VAR" ]]
则为假(返回1
)并且该then
语句不执行。如果变量非空,您是否打算让测试返回 true?如果是这样,请替换
-z
为-n
:-n
为简洁起见,如果省略,则执行相同的测试: