27
W większości przypadków [
jest wbudowana w powłokę i jest równoważna z test
. Jednak test
istnieje również jako samodzielny plik wykonywalny: to właśnie /bin/[
widziałeś. Możesz to przetestować za pomocą type -a [
(działającego systemu Arch Linux bash
):
$ type -a [
[ is a shell builtin
[ is /bin/[
W moim systemie mam dwa [
: wbudowaną powłokę i plik wykonywalny /bin
. Plik wykonywalny jest udokumentowany w 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.
[ ... ]
Jak widać we fragmencie strony podręcznika cytowanym powyżej test
i [
są one równoważne. Polecenia /bin/[
i /bin/test
są określone przez POSIX, dlatego je znajdziesz, mimo że wiele powłok udostępnia je również jako wbudowane. Ich obecność zapewnia, że konstrukty takie jak:
[ "$var" -gt 10 ] && echo yes
będzie działać, nawet jeśli uruchamiająca je powłoka nie ma [
wbudowanego. Na przykład w tcsh
:
> which [
/sbin/[
> set var = 11
> [ "$var" -gt 10 ] && echo yes
yes
[
wbudowanego, jest po prostu powłoką, której autorzy postanowili nie dodawać żadnej.tcsh
nie ma to[
polecenie wbudowane na przykład.bash
tylko jeden z wielu programów (powłok) zaprojektowanych do wykonywania podobnych zadań. Bash jest jednym z najpopularniejszych, ale wiele systemów jest dostarczanych z różnymi domyślnymi powłokami. Niektóre z nich są lepiej znanesh
,bash
,zsh
,dash
,ksh
,tcsh
,csh
ifish
. Możesz zobaczyć te dostępne w twoim systemie zcat /etc/shells
częściową listą tutaj .sh
jestdash
, ale myślałem, że korzysta z systemu ratownictwa/bin/sh
nie BusyBox. Jesteś pewny?Służy do testowania warunków w skryptach powłoki. Inna nazwa tego programu to
test
:To wygląda na gramatykę powłoki, ale tak nie jest. Zwykle
[
jest wbudowana w powłokę, ale prawdopodobnie jako awaria istnieje jako polecenie zewnętrzne.Zobacz blok „WYRAŻENIA WARUNKOWE” w
man bash
.źródło
[
jest taka sama komenda jaktest
. W niektórych systemach * nix jeden jest tylko linkiem do drugiego. Na przykład, jeśli uruchomisz:zobaczysz to samo wyjście.
Większość powłok sh / shell posix zawiera wbudowane polecenia
[
itest
polecenia. To samo dotyczyecho
. W/bin/echo
większości powłok jest zarówno polecenie, jak i wbudowane. To jest powód, dla którego czasami czujesz, że na przykładecho
nie działa tak samo na różnych systemach.test
lub[
zwróć tylko kod wyjścia0
lub1
. Jeśli test się powiedzie, kod wyjścia to 0.Możesz także używać
[
zif
:Ale można używać
if
z każdym poleceniem,if
służy do testowania kodu wyjścia. Na przykład:Lub używając
if
:Ten sam wynik można uzyskać, używając tylko
test
polecenia do przetestowania kodu wyjścia zapisanego w zmiennejstat
:Możesz także używać
[[ ]]
i(( ))
do testowania, ale nie są one takie same jak[
itest
, mimo że mają prawie taką samą składnię:Wreszcie, aby dowiedzieć się, co to jest polecenie, możesz użyć:
źródło
cmp /usr/bin/[ /usr/bin/test
a może skrótów,sha256sum /usr/bin/[ /usr/bin/test
ale niestrings
. W moim systemie (openSUSE Tumbleweed) BTW nie są takie same (dlaczego).