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 », «интерпретатор командной -строки» или «интерпретатор командного языка».
Используйте форму ${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}"'
. Хотя это редко вызывает беспокойство.
Обратите внимание, что обычно это плохая идея, потому что иногда неудобно сбрасывать переменную, а иногда неудобно устанавливать для нее пустую строку. Обычно пустая переменная среды должна обрабатываться так же, как и незаданная.
В оболочке 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?» для дальнейшего рассмотрения этого вопроса.