Bash 4.4 prompt escape for number of jobs currently running

天大地大妈咪最大 提交于 2019-12-11 23:13:54

问题


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 of operator. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!