A variable named PROJECT appears in the output of set, but not in the output of env, and a script started from that shell cannot see it. What is the state of PROJECT?
LPIC-1 Exam 102-500, objective 105. Shells and shell scripting 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
Correct It is a shell variable that has not been exported, so it is not part of the environment passed to child processes
Correct. set lists all shell variables; env lists only those marked for export. Being in one and not the other is the definition of an unexported shell variable.
Not correct It is set to an empty value, which env suppresses from its output
Wrong. env prints exported variables whose value is empty as NAME= with nothing after the equals sign. Emptiness is not why it is missing.
Not correct It is marked read-only, and env only prints writable variables
Wrong. readonly prevents reassignment and unsetting; it has no bearing on export status, and read-only exported variables appear in env normally.
Not correct It is a shell function rather than a variable, and functions never appear in env
Wrong. set does list functions as well as variables, but a function would be shown with its body and parentheses, and a function can in fact be put into the environment with export -f.
Why
Every variable in bash exists in the shell; only exported ones are copied into the environment that execve hands to a child process. set with no arguments prints all shell variables and functions of the current shell, while env and printenv show only the exported set. export PROJECT promotes an existing variable without changing its value, and export -n demotes it again.
Where this comes from
- Cited
- manual page bash(1)
Practise this
Reading one question is not practice. The trainer will draw a short set from objective 105 and space the ones you get wrong.
More questions on this objective
- A user logs in at a text console, and bash starts as an interactive login shell. Which file in that user's home directory is read by bash itself as part of login startup? machine-checked
- You are already logged in to a graphical desktop and open a new terminal window, so bash starts as an interactive shell that is not a login shell. Which per-user file does bash read in that case? machine-checked
- An executable script contains only the line `export EDITOR=vim`. After running it as `./setenv.sh`, `echo $EDITOR` in the calling shell prints nothing. What explains this? machine-checked
- In bash, what is the effect of `export MYVAR`? machine-checked
- At a bash prompt you run `alias ll='ls -l'` and it works for the rest of that session, but a terminal window opened afterwards does not recognise `ll`. Which statement explains this and gives the standard remedy? machine-checked
- A command finishes and the shell reports an exit status of 0. What does that mean, and which parameter reports it? machine-checked