Можно ли «сбросить» все специальные переменные bash с помощью команды, например env? - PullRequest
0 голосов
/ 09 сентября 2018
#!/bin/bash
env

Это выплевывает кучу переменных окружения. $ 0, $ @, $ _ и т. Д. Не выводятся. Есть ли способ выгрузить их, подобно тому, как env или set сбрасывает остальную среду? Я не имею в виду что-то вроде echo $0 или что-то подобное, я хочу увидеть все возможные специальные переменные в их текущем состоянии, не вызывая их напрямую.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Встроенные переменные включаются в вывод команды set. ($0 и $@ вообще не являются переменными, даже специальными, поэтому они не включены - но $_, $BASH_ALIASES, $BASH_SOURCE, $BASH_VERSINFO, $DIRSTACK, $PPID и все остальные, которые являются встроенными переменными, присутствуют).

$0, $*, $@ и т. Д. Не являются встроенными переменными; вместо этого они специальные параметры . Семантика совершенно иная (вы можете использовать declare -p для печати значения переменной, но не специального значения параметра; многие встроенные переменные теряют свое специальное поведение при переназначении, тогда как специальные параметры никогда не могут быть целью назначения; ).

http://wiki.bash -hackers.org / syntax / shellvars охватывает как встроенные переменные, так и специальные параметры.


Если ваша цель - создать журнал текущего состояния оболочки, я предлагаю следующее:

(set; set -x; : "$0" "$@") &>trace.log

set выводит вещи, которые являются на самом деле встроенными переменными (включая $_), и set -x журнал выполнения : "$0" "$@" будет содержать достаточно информации для воспроизведения всех специальных параметров, которые основаны на ваших позиционных параметрах ("$*", "$@" и т. д.); тогда как вывод set будет включать все остальные состояния.

0 голосов
/ 09 сентября 2018

Нет, не существует никакой функции для автоматического выполнения этого. Вам придется самим перечислять переменные, но это легко, потому что их всего несколько: Что такое специальные переменные оболочки знака доллара?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...