Почему $$ эха возвращает число?

Почему делает выполнение echo $$ в bash возвратите число как 7190, при выполнении echo $ только возвраты a $?

6
задан 1 September 2018 в 03:25

3 ответа

Конвенция.

$: Расширяется до идентификатора процесса оболочки. В () подоболочка, это расширяется до идентификатора процесса оболочки вызова, не подоболочки (см. ссылку на руководство ниже).

rinzwind@schijfwereld:~$ echo $
3244
rinzwind@schijfwereld:~$ ps -ef |grep 3244
rinzwind  3244  3237  0 19:06 pts/0    00:00:00 /bin/bash

Очень полезный при кодировании программного обеспечения. И это может использоваться в качестве сырой нефти (mktemp, был бы лучший метод), способ создать временные файлы

1 $ не имеет никакого особого значения, таким образом, это дает Вам, что всегда делает эхо: возвратите его.

существует страница руководства , выделенная этому (3.4.2 Специальных Параметра).

17
ответ дан 23 November 2019 в 07:14

Вот реальное применение $ взято от Экранный Таймер Блокировки :

# Check if lock screen timer already running
pID=$(pgrep -f "${0##*/}") # All PIDs matching lock-screen-timer name
PREVIOUS=$(echo "$pID" | grep -v ^"$") # Strip out this running copy ($$)
if [ "$PREVIOUS" != "" ]; then
    kill "$PREVIOUS"
    rm ~/.lock-screen-timer-remaining
    zenity --info --title="Lock screen timer already running" --text="Previous lock screen timer has been terminated."
fi

В этом фрагменте кода строка:

PREVIOUS=$(echo "$pID" | grep -v ^"$") # Strip out this running copy 

использование текущий рабочий процесс ($) для удаления его (обозначенный не -v) из списка всех процессов, работающих под тем же именем (lock-screen-timer в этом случае).

, Если была предыдущая под управлением копия, код уничтожает ее, и удалите рабочий файл, который она использовала.

1
ответ дан 23 November 2019 в 07:14

В ударе для утверждения использования переменной мы используем $, использование $$ с первым знаком доллара мы говорим, что я хочу использовать переменную и использование второго, мы говорим, что название той переменной на самом деле a $. это - на самом деле соглашение о присвоении имен, и эта переменная содержит идентификатор процесса текущей оболочки.

Поскольку Вы спросили в комментариях с $$$$ Вы возвращаете тот же идентификатор процесса дважды.


Слишком (Отсюда) существуют другие переменные:

  • $1, $2, $3... позиционные параметры.
  • "$@" подобная массиву конструкция всех позиционных параметров, {$1, $2, $3 ...}.
  • "$*" расширение IFS всех позиционных параметров, $1 $2 $3 ....
  • $# количество позиционных параметров.
  • $- текущие опции установлены для оболочки.
  • $$ pid текущей оболочки (не подокружают).
  • $_ новый параметр (или путь брюшного пресса команды для запуска текущей оболочки сразу после запуска).
  • $IFS (вход) разделитель полей.
  • $? новый приоритетный конвейерный статус выхода.
  • $! PID новой фоновой команды.
  • $0 название сценария оболочки или сценария оболочки.
11
ответ дан 23 November 2019 в 07:14

Другие вопросы по тегам:

Похожие вопросы: