What is the logic behind how bash tests for true/false?What is the difference between : and true?What is the...

How would photo IDs work for shapeshifters?

How to deal with fear of taking dependencies

Does bootstrapped regression allow for inference?

How to manage monthly salary

What does 'script /dev/null' do?

What is the meaning of "of trouble" in the following sentence?

Can the Produce Flame cantrip be used to grapple, or as an unarmed strike, in the right circumstances?

Add an angle to a sphere

What is the command to reset a PC without deleting any files

How to answer pointed "are you quitting" questioning when I don't want them to suspect

New order #4: World

Calculate Levenshtein distance between two strings in Python

Finding files for which a command fails

How can I plot a Farey diagram?

Copycat chess is back

Patience, young "Padovan"

What does "enim et" mean?

What does it exactly mean if a random variable follows a distribution

Why is the design of haulage companies so “special”?

Shall I use personal or official e-mail account when registering to external websites for work purpose?

Why was the "bread communication" in the arena of Catching Fire left out in the movie?

What causes the sudden spool-up sound from an F-16 when enabling afterburner?

Why did the Germans forbid the possession of pet pigeons in Rostov-on-Don in 1941?

Is it wise to hold on to stock that has plummeted and then stabilized?



What is the logic behind how bash tests for true/false?


What is the difference between : and true?What is the builtin `:` used for in Bash?bash script trap for exit and err and logic for differenceWhat is the rationale behind $array not expanding the whole array in ksh and bash?extract columns from TRUE/FALSE matrix based on proportion of TRUE values within the columnExpression evaluates to false in for loop whereas it's true in ifWhy does `source foo && true` exit the script in bash?for loop logic porting from bash to cshBash: how can I run `sudo -n true` in the background without interfering with `read`?What's the purpose of “true” in bash “if sudo true; then”






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







2















This:



$ echo $VAR
something


And this:



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


Yet this:



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


This screws with my head.



UPDATE



Here's some real code. I can't get this to work.



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
}


UPDATE 2: Success



Finally figured it out. Was having problems getting the status of the first line in the if statement. Had to do some trickery to get the output of the tmux statement in the first line of the if statement. If anyone knows a cleaner way to do this, I'm all ears.



Here's the working code:



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
}









share|improve this question




















  • 2





    Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

    – John1024
    yesterday











  • It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

    – StevieD
    yesterday













  • It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

    – StevieD
    yesterday











  • I should just be going this in perl. Fuck this crazy shit.

    – StevieD
    yesterday











  • Jesus, finally figured it out. Posting solution.

    – StevieD
    yesterday




















2















This:



$ echo $VAR
something


And this:



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


Yet this:



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


This screws with my head.



UPDATE



Here's some real code. I can't get this to work.



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
}


UPDATE 2: Success



Finally figured it out. Was having problems getting the status of the first line in the if statement. Had to do some trickery to get the output of the tmux statement in the first line of the if statement. If anyone knows a cleaner way to do this, I'm all ears.



Here's the working code:



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
}









share|improve this question




















  • 2





    Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

    – John1024
    yesterday











  • It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

    – StevieD
    yesterday













  • It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

    – StevieD
    yesterday











  • I should just be going this in perl. Fuck this crazy shit.

    – StevieD
    yesterday











  • Jesus, finally figured it out. Posting solution.

    – StevieD
    yesterday
















2












2








2








This:



$ echo $VAR
something


And this:



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


Yet this:



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


This screws with my head.



UPDATE



Here's some real code. I can't get this to work.



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
}


UPDATE 2: Success



Finally figured it out. Was having problems getting the status of the first line in the if statement. Had to do some trickery to get the output of the tmux statement in the first line of the if statement. If anyone knows a cleaner way to do this, I'm all ears.



Here's the working code:



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
}









share|improve this question
















This:



$ echo $VAR
something


And this:



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


Yet this:



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


This screws with my head.



UPDATE



Here's some real code. I can't get this to work.



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
}


UPDATE 2: Success



Finally figured it out. Was having problems getting the status of the first line in the if statement. Had to do some trickery to get the output of the tmux statement in the first line of the if statement. If anyone knows a cleaner way to do this, I'm all ears.



Here's the working code:



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
}






bash






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited yesterday









Rui F Ribeiro

42k1483142




42k1483142










asked yesterday









StevieDStevieD

1759




1759








  • 2





    Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

    – John1024
    yesterday











  • It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

    – StevieD
    yesterday













  • It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

    – StevieD
    yesterday











  • I should just be going this in perl. Fuck this crazy shit.

    – StevieD
    yesterday











  • Jesus, finally figured it out. Posting solution.

    – StevieD
    yesterday
















  • 2





    Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

    – John1024
    yesterday











  • It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

    – StevieD
    yesterday













  • It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

    – StevieD
    yesterday











  • I should just be going this in perl. Fuck this crazy shit.

    – StevieD
    yesterday











  • Jesus, finally figured it out. Posting solution.

    – StevieD
    yesterday










2




2





Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

– John1024
yesterday





Your update does not include enough information. Please (a) include the values of TERM, TMUX, and TMUX_MAN_PANE from before the function runs and (b) include the output of the function and then (c) explain how that output differs from what you expect.

– John1024
yesterday













It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

– StevieD
yesterday







It's all a mess. In the first line of the if statement, I just want to know if that command is throwing an error. There is no seemingly rational way to do that. I don't want the output from the command, I want to know if it's throwing an error. That's it.

– StevieD
yesterday















It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

– StevieD
yesterday





It's showing the command was a success even though it can't find the pane. I see no way to extract the output from that tmux command.

– StevieD
yesterday













I should just be going this in perl. Fuck this crazy shit.

– StevieD
yesterday





I should just be going this in perl. Fuck this crazy shit.

– StevieD
yesterday













Jesus, finally figured it out. Posting solution.

– StevieD
yesterday







Jesus, finally figured it out. Posting solution.

– StevieD
yesterday












1 Answer
1






active

oldest

votes


















7














The key is that 0 means true and 1 (or any other non-zero value) means false.



In shell, a test that is true (or a program which completes successfully), exits with code 0. The test [[ -z "$VAR" ]] returns code zero (true) if $VAR is empty or one (false) if it is not empty:



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


In sum, if $VAR is non-empty, then [[ -z "$VAR" ]] is false (returns 1) and the then statement does not execute.



Did you intend for the test to return true if the variable was non-empty? If so, replace -z with -n:



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


For brevity, the same test is performed if -n is omitted:



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





share|improve this answer


























  • I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

    – StevieD
    yesterday






  • 1





    @StevieD Run set -x and then run your code. This will show you how every step is evaluated.

    – John1024
    yesterday













  • Ah, shit. Forgot about that setting. I'll try it.

    – StevieD
    yesterday












Your Answer








StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "106"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511129%2fwhat-is-the-logic-behind-how-bash-tests-for-true-false%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









7














The key is that 0 means true and 1 (or any other non-zero value) means false.



In shell, a test that is true (or a program which completes successfully), exits with code 0. The test [[ -z "$VAR" ]] returns code zero (true) if $VAR is empty or one (false) if it is not empty:



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


In sum, if $VAR is non-empty, then [[ -z "$VAR" ]] is false (returns 1) and the then statement does not execute.



Did you intend for the test to return true if the variable was non-empty? If so, replace -z with -n:



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


For brevity, the same test is performed if -n is omitted:



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





share|improve this answer


























  • I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

    – StevieD
    yesterday






  • 1





    @StevieD Run set -x and then run your code. This will show you how every step is evaluated.

    – John1024
    yesterday













  • Ah, shit. Forgot about that setting. I'll try it.

    – StevieD
    yesterday
















7














The key is that 0 means true and 1 (or any other non-zero value) means false.



In shell, a test that is true (or a program which completes successfully), exits with code 0. The test [[ -z "$VAR" ]] returns code zero (true) if $VAR is empty or one (false) if it is not empty:



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


In sum, if $VAR is non-empty, then [[ -z "$VAR" ]] is false (returns 1) and the then statement does not execute.



Did you intend for the test to return true if the variable was non-empty? If so, replace -z with -n:



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


For brevity, the same test is performed if -n is omitted:



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





share|improve this answer


























  • I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

    – StevieD
    yesterday






  • 1





    @StevieD Run set -x and then run your code. This will show you how every step is evaluated.

    – John1024
    yesterday













  • Ah, shit. Forgot about that setting. I'll try it.

    – StevieD
    yesterday














7












7








7







The key is that 0 means true and 1 (or any other non-zero value) means false.



In shell, a test that is true (or a program which completes successfully), exits with code 0. The test [[ -z "$VAR" ]] returns code zero (true) if $VAR is empty or one (false) if it is not empty:



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


In sum, if $VAR is non-empty, then [[ -z "$VAR" ]] is false (returns 1) and the then statement does not execute.



Did you intend for the test to return true if the variable was non-empty? If so, replace -z with -n:



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


For brevity, the same test is performed if -n is omitted:



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





share|improve this answer















The key is that 0 means true and 1 (or any other non-zero value) means false.



In shell, a test that is true (or a program which completes successfully), exits with code 0. The test [[ -z "$VAR" ]] returns code zero (true) if $VAR is empty or one (false) if it is not empty:



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


In sum, if $VAR is non-empty, then [[ -z "$VAR" ]] is false (returns 1) and the then statement does not execute.



Did you intend for the test to return true if the variable was non-empty? If so, replace -z with -n:



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


For brevity, the same test is performed if -n is omitted:



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






share|improve this answer














share|improve this answer



share|improve this answer








edited yesterday

























answered yesterday









John1024John1024

48.5k5113128




48.5k5113128













  • I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

    – StevieD
    yesterday






  • 1





    @StevieD Run set -x and then run your code. This will show you how every step is evaluated.

    – John1024
    yesterday













  • Ah, shit. Forgot about that setting. I'll try it.

    – StevieD
    yesterday



















  • I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

    – StevieD
    yesterday






  • 1





    @StevieD Run set -x and then run your code. This will show you how every step is evaluated.

    – John1024
    yesterday













  • Ah, shit. Forgot about that setting. I'll try it.

    – StevieD
    yesterday

















I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

– StevieD
yesterday





I just posted my real code. I cannot, for the life of me, get that to work. I'm literally going fucking nuts.

– StevieD
yesterday




1




1





@StevieD Run set -x and then run your code. This will show you how every step is evaluated.

– John1024
yesterday







@StevieD Run set -x and then run your code. This will show you how every step is evaluated.

– John1024
yesterday















Ah, shit. Forgot about that setting. I'll try it.

– StevieD
yesterday





Ah, shit. Forgot about that setting. I'll try it.

– StevieD
yesterday


















draft saved

draft discarded




















































Thanks for contributing an answer to Unix & Linux Stack Exchange!


  • Please be sure to answer the question. Provide details and share your research!

But avoid



  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.


To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f511129%2fwhat-is-the-logic-behind-how-bash-tests-for-true-false%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Can't compile dgruyter and caption packagesLaTeX templates/packages for writing a patent specificationLatex...

Schneeberg (Smreczany) Bibliografia | Menu...

Hans Bellmer Spis treści Życiorys | Upamiętnienie | Przypisy | Bibliografia | Linki zewnętrzne |...