Select the TWO true statements about shell variables and the environment in bash.
LPIC-1 Exam 101-500, objective 103. GNU and Unix commands medium
Machine-checked — no person has signed for it. This question was read against the source cited below by an automated pass, which found no contradiction. That is a weaker claim than it sounds: the same kind of process wrote the question, so it can confirm its own mistake.
Treat it as a good draft rather than as settled fact, and read the source below before you rely on it. It is not used in mock exams here — only questions a person has signed for are.
How these questions are written — where each question comes from, what the verification ledger records, and what happens when one is found wrong.
The options
Choose 2.
Not correct A variable assigned without export is still visible to programs started from that shell.
Wrong. Without export it is a shell variable only, so a program the shell executes — including a script run as ./script.sh — never receives it in its environment. (A forked subshell such as ( ... ) or $( ... ) is a copy of the same shell and does still see it; that is not a new program.)
Correct export VAR marks VAR so that it is placed in the environment of commands the shell starts.
Correct. Exported variables are inherited by child processes; that inheritance is the whole point of export.
Not correct set with no arguments prints only the exported variables.
Wrong. `set` with no arguments prints all shell variables AND shell functions. It is `env` (or `export -p`) that shows the exported environment.
Not correct env with no arguments prints every shell variable, exported or not.
Wrong. env prints the environment it received, which contains only exported variables. It is also used to run a command with a modified environment, e.g. env LANG=C sort.
Correct unset VAR removes the variable from the current shell entirely.
Correct. unset deletes the variable (or a function, with -f), which is different from setting it to an empty string.
Why
Bash keeps shell variables and the environment as two overlapping sets. Assignment creates a shell variable; export promotes it into the environment so child processes inherit it; unset removes it. `set` lists shell variables and functions, `env` lists the environment. Remember that changes made in a child can never propagate back to the parent shell — which is why you source a script instead of executing it when you want its variables to stick.
Where this comes from
- Cited
- LPI exam objective 103.1
- What it says
- Shell variables versus environment variables; export, set, unset and env.
Practise this
Reading one question is not practice. The trainer will draw a short set from objective 103 and space the ones you get wrong.
More questions on this objective
- A user starts a new terminal window in a running graphical desktop session, which launches bash as an interactive shell that is NOT a login shell. Which file in the user's home directory does bash read in that case? machine-checked
- In bash, which history expansion re-runs the entire previous command line? machine-checked
- Which bash command prints the literal five characters $USER instead of the current user name? machine-checked
- You want /opt/bin searched for executables, after all the directories already in PATH, in the current bash session and in every command started from it. Which command does that? machine-checked
- There is a passwd manual page in section 1 (the command) and another in section 5 (the /etc/passwd file format). Which command opens the section 5 page? machine-checked
- Type the single command that prints the absolute path of the shell's current working directory. machine-checked