megjegyzések
Válasz
A szögletes zárójelek rövidített jelölést jelentenek a feltételes teszt elvégzéséhez. A [
zárójelek, valamint az [[
tényleges parancsok a Unixon belül, akár hiszed, akár nem.
Gondolj:
$ [ -f /etc/rc.local ] && echo "real file" real file -and- $ test -f /etc/rc.local && echo "real file" real file
A Bash-ben a [
egy beépített parancs, valamint egy futtatható fájl. Az [[
csak egy kulcsszó a Bash-hoz.
Példa
Ezt a type
:
$ type -a [ [ is a shell builtin [ is /usr/bin/[ $ type -a [[ [[ is a shell keyword
A fizikai végrehajtható fájl itt látható:
$ ls -l /usr/bin/[ -rwxr-xr-x 1 root root 37000 Nov 3 2010 /usr/bin/[
beépített vs . kulcsszavak
Ha megnézi a Bash man oldalt, man bash
, akkor a következő definíciókat találja a kettőhöz:
-
kulcsszavak – A lefoglalt szavak olyan szavak, amelyek különleges jelentéssel bírnak a héj számára. A következő szavak: fenntartva, ha nem idézik, és vagy egy egyszerű parancs első szava (lásd alább a HÉTVEGYESZKÖZT), vagy egy eset harmadik szava, vagy parancsra:
! case do done elif else esac fi for function if in select then until while { } time [[ ]]
-
beépített – Ha a parancs neve nem tartalmaz perjelet, akkor a shell megkísérli megtalálni. létezik egy shell függvény ezen a néven, ezt a függvényt az F-ben fent leírtak szerint hívjuk meg UNCTIONS. Ha a név nem felel meg egy függvénynek, akkor a shell megkeresi a shell beépítettek listáján. Ha talál egyezést, akkor a beépítettet meghívjuk.
Ha a név nem shell vagy függvény, és nem tartalmaz perjelet, a bash a PATH minden elemében keres egy könyvtárat, amely futtatható fájlt tartalmaz ezt a nevet. A Bash hash táblázattal emlékezik a futtatható fájlok teljes elérési útjára (lásd a hash alatt a SHELL BUILTIN COMMANDS alatt). A PATH könyvtárak teljes keresése csak akkor történik, ha a parancs nem található a hash táblában. Ha a keresés sikertelen, akkor a shell egy definiált shell függvényt keres, amelynek neve: command_not_found_handle. Ha ez a függvény létezik, akkor az eredeti paranccsal és az eredeti parancs argumentumaival hívják meg, és a függvény kilépési állapota a shell kilépési állapotává válik. Ha ez a függvény nincs meghatározva, akkor a shell hibaüzenetet nyomtat, és a 127. kilépési állapotot adja vissza.
man oldal
Ha átnézi a Bash man oldalt megtalálja rajta a részletekről.
test expr [ expr ] Return a status of 0 or 1 depending on the evaluation of the conditional expression expr. Each operator and operand must be a separate argument. Expressions are composed of the primaries described above under CONDITIONAL EXPRESSIONS. test does not accept any options, nor does it accept and ignore an argument of -- as signifying the end of options.
Végül a man oldalról:
test and [ evaluate conditional expressions using a set of rules based on the number of arguments.
# 1 SZERKESZTÉS
Az OP nyomon követési kérdése.
Ok, akkor miért van akkor szükség van egy “ha” -ra? Úgy értem, miért létezik “ha”, még akkor is, ha a “[” elegendő lenne.
A egy feltétel feltétele. A test
vagy [ ... ]
parancs egyszerűen kiértékeli a feltételt, és 0 vagy a 1. A 0 vagy 1 értéket az if utasítás követi. A 2 együtt működik, amikor használja őket.
Példa
if [ ... ]; then ... do this ... else ... do that ... fi
Megjegyzések
- Rendben, akkor miért van szükség " -re, ha "
ha " akkor is létezik, ha " [" elegendő lenne.
[[
lehet egy beépített shell is. if
kapcsolóként működik, és a feltételeketől kapott eredmények függvényében végrehajtja a parancsokat a then
blokkban, vagy sem. if
nem ' nem igazán választható abban a módon, ahogyan ' gondolkodsz, a példák, amelyeket a &&
használatát mutatta, ami hasonló a if
-hez. Ha a feltétel nem sikerül, akkor a &&
utáni parancs nem ' fut. ]
ebben az összefüggésben argumentum a [
parancsra.' sejthetem, hogy vannak, de ' nem gondolhatok semmit a fejem tetejéről. Érdemes lehet újabb Q-ként feltenni, ha ' valóban kíváncsi vagy. /usr/bin/[
azt mutatja, hogy a Fedora rendszerem alaptevékenységének része. Mindig konzultálhat a forrással ezekben a kérdésekben, ha pontosan meg akarja tudni, hogyan működnek ilyen dolgok. git.savannah.gnu.org/cgit/coreutils.git Válasz
Óóóó, az egyik kedvenc témám !!
A szögletes zárójelek a “teszt” parancs szinonimái. Ha elolvassa a teszt man oldalát, akkor látni fogja, hogy a teszt parancsot meghívhatja
test -r /etc/profile.d/java.sh
vagy
[ -r /etc/profile.d/java.sh ]
Szükség van a zárójelek és a bennük és kívül található dolgok közötti szóközökre.
A” teszt “parancs ebben az esetben azt ellenőrzi, hogy az / etc / fájl A profile.d / java.sh az aktuális felhasználó számára olvasható. Ez magában foglalja annak ellenőrzését, hogy létezik-e, természetesen. 🙂
A &&
egy bash szintaxis parancsikon a következőre: “ha a bal oldali parancs sikeres, akkor hajtsa végre a jobb oldali parancsot. Tehát ez az összetett parancs rövidítése egy “ha-akkor” -nak, amely így nézne ki:
if test -r /etc/profile.d/java.sh then /etc/profile.d/java.sh fi
Most kettős szögletes zárójelet is talál elmagyarázta a bash man oldalon. Ezek egy kiterjesztett tesztfunkció belső verziója. Ne feledje, hogy ezek nem teljesen ugyanazok. Vannak dolgok, amelyeket nem a “test” paranccsal és annak ” [“szinonima.
Megjegyzések
- Csak szeretném meggyőződni arról, hogy értem-e. Ha a szögletes zárójelek a " teszt ", nem kéne ' t a második példád " [- r /etc/profile.d/java.sh] "? Más szavakkal, távolítsa el a felesleges tesztnyilatkozatot.
- Igen, pmont, te ' természetesen teljesen igaza van! Nem voltam ' óvatos, amikor vágtam és beillesztettem. I ' kijavítottam. Köszönöm!
if
utasításra vonatkozik. Ez a kérdés azt kérdezi, hogy mit jelentenek a zárójelekif
utasítás nélkül.