• 0 Posts
  • 7 Comments
Joined 1 year ago
cake
Cake day: July 1st, 2023

help-circle

  • This works fine for me:

    function foo() {
      bar[0]="hello"
      bar[1]="world"
      return 1
    }
    if ! foo; then
      echo "${bar[@]}"
    fi
    

    https://onlinegdb.com/xPIFP110w


    Are you getting messed up by the way bash handles exit statuses? An exit status of 0 indicates a success and a non-zero exit status indicates a failure (which allows for the different exit statuses to indicate different errors).

    So if my_func; then something; fi will only run something when my_func returns 0. In your case, you’re using ! to do the opposite so it only runs when your function returns a non-zero status.

    This can be quite surprising if you’re expecting the behavior found in other languages like python or C++ where 0 represents false and 1 represents true.





  • It’s useful when vim is being run from a different program or script.

    For example, if I run p4 change to create a new Perforce changelist it will open up my editor (which I have set to vim) so that I can enter the CL description and other fields. If I realize I don’t actually actually want to create the CL yet I can use :cq to quit with an error so that p4 knows to abort.

    I also have a script I use for diffing a list of file pairs. It runs vimdiff on the first pair of files then if I exit with :qa it will move on to the next pair of files. But if I exit with :cq it will just abort and skip all of the remaining file pairs.