[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: sh vs. bash -xc 'a=b c=$a'
From: |
Robert Elz |
Subject: |
Re: sh vs. bash -xc 'a=b c=$a' |
Date: |
Thu, 23 May 2024 20:32:32 +0700 |
Date: Thu, 23 May 2024 09:04:48 -0400
From: Chet Ramey <chet.ramey@case.edu>
Message-ID: <d7b7717e-794f-4447-a2df-894caf0f0ee6@case.edu>
| The bash output clearly tells you the
| order of operations, which is the whole purpose of -x.
But it can be horribly misleading. Consider what bash does with
this similar case (I used 5.3a1 but I suspect any version would do)
bash-5.3a1 -xc 'a=a b=b; a=1 b=2 cat /dev/null; echo $a'
+ a=a
+ b=b
+ a=1
+ b=2
+ cat /dev/null
+ echo a
a
versus
bash-5.3a1 -xc 'a=a b=b; a=1 b=2; cat /dev/null; echo $a'
+ a=a
+ b=b
+ a=1
+ b=2
+ cat /dev/null
+ echo 1
1
The only difference in the two outputs from -x is the arg to the echo
command at the end, no indication at all why they're different.
On the other hand:
sh -xc 'a=a b=b; a=1 b=2 cat /dev/null; echo $a'
+ a=a b=b
+ a=1 b=2 cat /dev/null
+ echo a
a
sh -xc 'a=a b=b; a=1 b=2 ; cat /dev/null; echo $a'
+ a=a b=b
+ a=1 b=2
+ cat /dev/null
+ echo 1
1
and it is quite clear what is happening.
Personally I'd think it more likely that your average reader would
interpret "a=1 b=2" as being executed left to right than that they'd
somehow guess that "a=1" isn't really happening in shell environment.
kre