Bash 4.4 - подсказка для количества запущенных в данный момент заданий - PullRequest
0 голосов
/ 20 декабря 2018

Я наткнулся на этот пост , где пользователь chepner предложил в своем ответе использовать \j (как упомянуто в руководстве по bash ) для получениятекущий текущий счет фоновых заданий.В основном это сводится к

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

Может кто-нибудь просветить меня о том, что именно здесь происходит?Например,

  • , почему ${\j@P} не работает, а
  • , что именно делает 1017 *? 1018 *

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Часть перед @ - это имя параметра, который вы пытаетесь раскрыть, это не может быть строка, которую вы хотите каким-либо образом изменить.И @P - это расширение параметров, введенное в Bash 4.4 (см. manual ):

${<i>parameter</i>@<i>operator</i>}

Расширение является либо преобразованием значенияparameter или информация о самом параметре, в зависимости от значения operator.Каждый оператор представляет собой одну букву:

P

Расширение представляет собой строку, которая является результатом расширения значения parameter, как если бы оно былострока приглашения (см. Управление запросом ).

0 голосов
/ 20 декабря 2018

Как и при любом расширении параметра, вы должны указать имя параметра, а не произвольную строку.\j не является именем параметра;это текст, который вы хотите получить из расширения параметра.

После расширения параметра @P дополнительно подвергает результат быстрому расширению, так что \j заменяется наколичество рабочих мест.

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