Почему делает выполнение echo $$
в bash
возвратите число как 7190
, при выполнении echo $
только возвраты a $
?
Конвенция.
$
: Расширяется до идентификатора процесса оболочки. В () подоболочка, это расширяется до идентификатора процесса оболочки вызова, не подоболочки (см. ссылку на руководство ниже).
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 Специальных Параметра).
Вот реальное применение $
взято от Экранный Таймер Блокировки :
# 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
в этом случае).
, Если была предыдущая под управлением копия, код уничтожает ее, и удалите рабочий файл, который она использовала.
В ударе для утверждения использования переменной мы используем $
, использование $$
с первым знаком доллара мы говорим, что я хочу использовать переменную и использование второго, мы говорим, что название той переменной на самом деле a $
. это - на самом деле соглашение о присвоении имен, и эта переменная содержит идентификатор процесса текущей оболочки.
Поскольку Вы спросили в комментариях с $$$$
Вы возвращаете тот же идентификатор процесса дважды.
Слишком (Отсюда) существуют другие переменные:
$1
,$2
,$3
... позиционные параметры."$@"
подобная массиву конструкция всех позиционных параметров,{$1, $2, $3 ...}
."$*"
расширение IFS всех позиционных параметров,$1 $2 $3 ...
.$#
количество позиционных параметров.$-
текущие опции установлены для оболочки.$$
pid текущей оболочки (не подокружают).$_
новый параметр (или путь брюшного пресса команды для запуска текущей оболочки сразу после запуска).$IFS
(вход) разделитель полей.$?
новый приоритетный конвейерный статус выхода.$!
PID новой фоновой команды.$0
название сценария оболочки или сценария оболочки.