Проверить, задана ли переменная среды из командной строки

I found there are shells like nologin, false, and true. What else are there?

Это не оболочки, как @ctrl -alt -delor уже указывал .

I don't know what to type to list the shells.

Вы не можете получить исчерпывающий список всех существующих оболочек. Это все равно, что попросить список всех существующих программ.

Whenever I search with linux shell types (and the likes), I get results in the context of illustrating differences between bash, csh, zsh, and the others you know.

Что очень удобно, потому что этопопулярные оболочки, с которыми вы, скорее всего, столкнетесь.

What is the keyword to use to learn more about the subject?

«Оболочка» также иногда упоминается как «REPL », «интерпретатор командной -строки» или «интерпретатор командного языка».

0
17.06.2021, 00:10
2 ответа

Используйте форму ${VAR+TEXT}расширения параметра . ${VAR+1}пусто, если VARне установлено, а 1установлено VAR, даже если оно пусто. (Принимая во внимание, что ${VAR:+1}пусто, если VARне установлено или пусто, и 1, если VARустановлено не пустое значение -.)

if [ -n "${MY_URDSFDFS+1}" ]; then
  echo "\$MY_URDSFDFS is set"
else
  echo "\$MY_URDSFDFS is not set"
fi

Это работает в любой оболочке POSIX или Bourne,т. е. во всех современных и даже самых древних диалектах ш.

Это не делает различий между переменными окружения и переменными оболочки. Если вы должны отклонить не -экспортированные переменные оболочки, вы можете выполнить тест в отдельном процессе:sh -c 'test -n "${MY_URDSFDFS+1}"'. Хотя это редко вызывает беспокойство.

Обратите внимание, что обычно это плохая идея, потому что иногда неудобно сбрасывать переменную, а иногда неудобно устанавливать для нее пустую строку. Обычно пустая переменная среды должна обрабатываться так же, как и незаданная.

6
28.07.2021, 11:24

В оболочке zsh, чтобы проверить, установлена ​​ли переменная, помимо стандартного [ -n "${var+set}" ], вы также можете использовать (( $+var )), где $+varрасширяется до 1, если $varустановлено, и до 0 в противном случае.

Обратите внимание, что в zsh, когда вы выполняете export var, когда $varранее не было установлено, если только zshне работает в режиме эмуляции shили ksh, автоматически назначается значение (0 для числовые переменные, пустой список для переменных массива/хэша (не имеет смысла экспортировать эти ), в противном случае пустой список ), поэтому эти тесты вернут true.

Чтобы проверить, установлена ​​ли переменная и находится ли она в среде, вы можете

if [[ -$parameters[var]- = *-export-* ]]; then
  echo var is set and exported to the environment
fi

(или ${(t)var}вместо $parameters[var]).

См. также этот ответ на вопрос «Как проверить, существует ли переменная в операторе if?» для дальнейшего рассмотрения этого вопроса.

0
28.07.2021, 11:24

Теги

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