From 58ed9df42c02f5e53519a58be86e2ce2315e8332 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 5 Jan 2022 21:46:28 +0000 Subject: Publishing new version --- gemfeed/atom.xml | 31 +++++++++++++++++++++++++++++-- gemfeed/index.gmi | 2 +- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/gemfeed/atom.xml b/gemfeed/atom.xml index e76a8e84..712cb381 100644 --- a/gemfeed/atom.xml +++ b/gemfeed/atom.xml @@ -1,6 +1,6 @@ - 2022-01-03T10:59:45+00:00 + 2022-01-05T21:44:28+00:00 snonux.de feed Having fun with computers! @@ -521,7 +521,7 @@ PAUL:X:1000:1000:PAUL BUETOW:/HOME/PAUL:/BIN/BASH jgs^^^^^^^`^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Art by Joan Stark -

Published by Paul Buetow 2021-11-29

+

Published by Paul Buetow 2021-11-29, last updated 2022-01-05

This is the first blog post about my Bash Golf series. This series is about random Bash tips, tricks and weirdnesses I came across. It's a collection of smaller articles I wrote in an older (in German language) blog, which I translated and refreshed with some new content.

Bash Golf Part 1 (you are reding this atm.)
Bash Golf Part 2
@@ -644,6 +644,33 @@ foo bar baz > ^C

In case you know more (subtle) differences, please write me an E-Mail and let me know.

+

Update: A reader sent me an E-Mail and pointed me to the Bash manual page, which explains the difference between () and {} (I should have checked that by myself):

+
+(list) list is executed in a subshell environment (see COMMAND EXECUTION ENVIRONMENT
+       below).   Variable  assignments  and builtin commands that affect the shell's
+       environment do not remain in effect after the command completes.  The  return
+       status is the exit status of list.
+
+{ list; }
+       list  is simply executed in the current shell environment.  list must be ter‐
+       minated with a newline or semicolon.  This is known as a group command.   The
+       return  status  is the exit status of list.  Note that unlike the metacharac‐
+       ters ( and ), { and } are reserved words and must occur where a reserved word
+       is  permitted  to  be recognized.  Since they do not cause a word break, they
+       must be separated from list by whitespace or another shell metacharacter.
+
+

So I was right that () is executed in a subprocess. But why does $$ not show a different PID? Also here (as pointed out by the reader) is the answer in the manual page:

+
+$      Expands to the process ID of the shell.  In a () subshell, it expands to  the
+       process ID of the current shell, not the subshell.
+
+

If we want print the subprocess PID, we can use the BASHPID variable:

+
+❯ echo $BASHPID; { echo $BASHPID; }; ( echo $BASHPID; )
+1028465
+1028465
+1028739
+

Expansions

Let's start with simple examples:

diff --git a/gemfeed/index.gmi b/gemfeed/index.gmi
index a85ecd91..8e46d7fd 100644
--- a/gemfeed/index.gmi
+++ b/gemfeed/index.gmi
@@ -4,7 +4,7 @@
 
 => ./2022-01-01-bash-golf-part-2.gmi 2022-01-01 (1077 words) - Bash Golf Part 2
 => ./2021-12-26-how-to-stay-sane-as-a-devops-person.gmi 2021-12-26 (2101 words) - How to stay sane as a DevOps person 
-=> ./2021-11-29-bash-golf-part-1.gmi 2021-11-29 (1199 words) - Bash Golf Part 1
+=> ./2021-11-29-bash-golf-part-1.gmi 2021-11-29 (1281 words) - Bash Golf Part 1
 => ./2021-10-22-defensive-devops.gmi 2021-10-22 (2276 words) - Defensive DevOps
 => ./2021-09-12-keep-it-simple-and-stupid.gmi 2021-09-12 (1365 words) - Keep it simple and stupid
 => ./2021-08-01-on-being-pedantic-about-open-source.gmi 2021-08-01 (2919 words) - On being Pedantic about Open-Source
-- 
cgit v1.2.3