help-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Please help clarify bash this common found code


From: Kerin Millar
Subject: Re: Please help clarify bash this common found code
Date: Fri, 20 Oct 2023 10:30:45 +0100

On Fri, 20 Oct 2023 13:33:03 +0700
Budi <budikusasi@gmail.com> wrote:

> Please help clarify bash this common yet doubtful line
> 
> So often read or found a variable definition (or/and declaration) is
> at the start preceding every command/code, one terminated by shel
> terminator the other not
> 
> This merely illustration, what is the definitive function/behaviour on
> e.g. each of
> 
> FOO=bar ; find /usr

This comprises two simple commands [1] [2], one of which is to be executed 
after the other.

> 
> and
> 
> FOO=bar  make Makefile

This is a solitary simple command.

> 
> Please crystal clearly elaborate it
> 

It is clearly explained by the manual [3]. A particularly important distinction 
is that, "If no command name results, the variable assignments affect the 
current shell environment. Otherwise, the variables are added to the 
environment of the executed command and do not affect the current shell 
environment."

Thus:

$ FOO=bar
$ printenv FOO   # FOO wasn't exported; environment of command/subprocess 
unaffected
$ declare -p FOO # current shell environment affected
declare -- FOO="bar"
$ unset -v FOO

Conversely:

$ FOO=bar printenv FOO
bar
$ declare -p FOO # current shell environment unaffected
bash: declare: FOO: not found

[1] https://www.gnu.org/software/bash/manual/html_node/Simple-Commands.html
[2] 
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_09_01
[3] 
https://www.gnu.org/software/bash/manual/html_node/Simple-Command-Expansion.html

-- 
Kerin Millar



reply via email to

[Prev in Thread] Current Thread [Next in Thread]