0

我偶然发现了这篇文章,用户chepner在他的回答中建议使用\j(如bash 手册中所述)来检索后台作业的当前运行计数。基本上它归结为

num_jobs="\j"
echo ${num_jobs@P}

谁能告诉我这里到底发生了什么?例如

  • 为什么${\j@P}不工作和
  • 到底@P在做什么?
4

2 回答 2

2

像任何参数扩展一样,您必须提供参数的名称,而不是任意字符串。\j不是参数的名称;它是您想参数扩展中获得的文本。

参数展开后,@P进一步对结果进行提示展开,以\j作业数代替。

$ num_jobs="\j"
$ echo "${num_jobs}"
\j
$ echo "${num_jobs@P}"
0
于 2018-12-20T14:50:59.003 回答
0

之前的部分@是您尝试扩展的参数的名称,它不能是您想要以某种方式修改的字符串。并且@P是 Bash 4.4 中引入的参数扩展(参见手册):

${parameter@operator}

扩展要么是值的转换,要么是parameter 关于参数本身的信息,具体取决于 的值 operator。每个运算符都是一个字母:

P

扩展是一个字符串,它是扩展 的值的结果, parameter就好像它是提示字符串一样(请参阅控制提示)。

于 2018-12-20T14:52:39.673 回答