问题
I stumbled across this post where user chepner proposed in his answer the usage of \j
(as mentioned in the bash manual) to retrieve the current running count of background jobs.
Basically it boils down to
num_jobs="\j"
echo ${num_jobs@P}
Can anyone enlighten me on what is going on here exactly? E.g.
- why
${\j@P}
is not working and - what
@P
is doing exactly?
回答1:
Like any parameter expansion, you have to supply the name of a parameter, not an arbitrary string. \j
isn't the name of a parameter; it's the text you want to get from a parameter expansion.
After the parameter has been expanded, @P
further subjects the result to prompt expansion, so that \j
is replaced by the number of jobs.
$ num_jobs="\j"
$ echo "${num_jobs}"
\j
$ echo "${num_jobs@P}"
0
回答2:
The part before the @
is the name of the parameter you're trying to expand, it can't be a string you want to modify somehow. And @P
is a parameter expansion introduced in Bash 4.4 (see manual):
${parameter@operator}
The expansion is either a transformation of the value of
parameter
or information about parameter itself, depending on the value ofoperator
. Each operator is a single letter:
P
The expansion is a string that is the result of expanding the value of
parameter
as if it were a prompt string (see Controlling the Prompt).
来源:https://stackoverflow.com/questions/53870897/bash-4-4-prompt-escape-for-number-of-jobs-currently-running