В большинстве случаев [
является встроенной оболочкой и эквивалентна test
. Однако, вроде бы test
, он также существует как отдельный исполняемый файл: это то, что /bin/[
вы видели. Вы можете проверить это с помощью type -a [
(в системе Arch Linux, запущенной bash
):
$ type -a [
[ is a shell builtin
[ is /bin/[
Итак, в моей системе их два [
: встроенная оболочка и исполняемый файл /bin
. Исполняемый файл задокументирован в man test
:
TEST(1) User Commands TEST(1)
NAME
test - check file types and compare values
SYNOPSIS
test EXPRESSION
test
[ EXPRESSION ]
[ ]
[ OPTION
DESCRIPTION
Exit with the status determined by EXPRESSION.
[ ... ]
Как вы можете видеть в выдержке страницы человека цитировал выше, test
и [
являются эквивалентными. /bin/[
И /bin/test
команды определяются POSIX поэтому вы найдете их , несмотря на то , что многие снаряды также обеспечить их внутренние команды. Их присутствие гарантирует, что такие конструкции как:
[ "$var" -gt 10 ] && echo yes
будет работать, даже если оболочка, в которой они запущены, не имеет [
встроенной функции. Например, в tcsh
:
> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ] && echo yes
yes
[
встроенной функции, - это просто оболочка, авторы которой решили ее не добавлять.tcsh
не имеет на[
встроенную команду, например.bash
лишь одна из многих программ (оболочек), которые предназначены для выполнения подобных задач. Bash является одной из самых популярных, но многие системы поставляются с различными оболочками по умолчанию. Некоторые из наиболее известных из них являютсяsh
,bash
,zsh
,dash
,ksh
,tcsh
,csh
иfish
. Вы можете увидеть список доступных в вашей системеcat /etc/shells
и частичный список здесь .sh
есть,dash
но я думал, что система спасения использует/bin/sh
не busybox. Вы уверены?Это используется для проверки состояния в сценариях оболочки. Другое название этой программы
test
:Это похоже на грамматику оболочки, но это не так. Обычно
[
это встроенная оболочка, но, вероятно, в качестве запасного варианта она существует как внешняя команда.Смотрите блок "УСЛОВНЫЕ ВЫРАЖЕНИЯ" в
man bash
.источник
[
это та же команда, что иtest
. В некоторых системах * nix одна просто ссылка на другую. Например, если вы запустите:вы увидите тот же результат.
Большинство sh-оболочек / posix-оболочек включают встроенные команды
[
иtest
команды. То же самое верно дляecho
. Существует как/bin/echo
большинстве оболочек команда, и встроенная функция. Вот почему иногда вы чувствуете, что, например,echo
не работает одинаково на разных системах.test
или[
верните только код выхода0
или1
. Если тест прошел успешно, код выхода равен 0.Вы также можете использовать
[
сif
:Но вы можете использовать
if
с каждой командой,if
для тестирования кода выхода. Например:Или, используя
if
:Вы можете получить тот же результат, используя только
test
команду для проверки кода завершения, который сохраняется в переменнойstat
:Вы также можете использовать
[[ ]]
и(( ))
для тестирования, но это не то же самое, что[
иtest
, несмотря на то, что они имеют почти такой же синтаксис:Наконец, чтобы узнать, что такое команда, вы можете использовать:
источник
cmp /usr/bin/[ /usr/bin/test
или, может быть, хэши,sha256sum /usr/bin/[ /usr/bin/test
но нетstrings
. В моей системе (openSUSE Tumbleweed) Кстати, они не одинаковы (как бы то ни было).