A script must store the output of the command date +%F in the shell variable TODAY. Which TWO lines do that? (Choose two.)
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
Choose 2.
Correct TODAY=$(date +%F)
Correct. Command substitution runs date in a subshell and replaces $(...) with its output, minus any trailing newlines. This is the modern spelling, and it nests without escaping.
Correct TODAY=`date +%F`
Correct. Backticks are the older spelling of the same command substitution and behave identically here. They are harder to nest, because inner backticks must be backslash-escaped, which is why $(...) is preferred.
Not correct TODAY = $(date +%F)
Wrong. An assignment may not have spaces around the equals sign. With them the shell reads a simple command whose name is TODAY and reports TODAY: command not found.
Not correct TODAY=date +%F
Wrong. Nothing here runs date. The shell reads this as the assignment TODAY=date placed in front of a command named +%F, so it reports +%F: command not found and TODAY is never left holding a date.
Not correct $TODAY=$(date +%F)
Wrong. The dollar sign asks for the variable's value, which is empty, so what is left is a word beginning with an equals sign and the shell tries to run it as a command. Assignment uses the bare name.
Why
Command substitution is how a script turns another command's output into data: $(command), or the older backtick form, runs the command in a subshell, waits for it, and substitutes what it wrote to standard output with trailing newlines removed. Because the substitution happens before the assignment, the whole thing is still one simple assignment and therefore still tolerates no spaces around the equals sign. Unquoted, the result is subject to word splitting, so a value that may contain spaces should be captured as TODAY="$(command)". The exit status of the command is available in $? afterwards, which is what lets a script check that the capture actually worked.
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