Olen hieman hämmentynyt siitä, mitä nämä operaattorit tekevät eri tavalla, kun käytetään bashissa (suluissa, kaksoissulkeissa, suluissa ja kaksoissulkeissa).
[[ , [ , ( , ((
Olen nähnyt ihmisten käyttävän niitä, jos tällaiset lausekkeet:
if [[condition]] if [condition] if ((condition)) if (condition)
Kommentit
- Liittyvät aiheet: yhden tai kahden hakasulkeen avulla – bash
- Sulkeet ja hakasulkeet eivät ole ’ t, joita on helppo etsiä dokumentaatiosta, ja että ’ s kaikki mitä sinulla on, jos et ’ tiedä näiden ominaisuuksien nimiä.
Vastaa
Bournen kaltaisissa kuorissa if
-lauseke näyttää tyypillisesti tältä:
if command-list1 then command-list2 else command-list3 fi
Lauseke then
suoritetaan, jos komentojen luettelo on nolla. Jos poistumiskoodi ei ole nolla, lauseke else
suoritetaan. command-list1
voi olla yksinkertainen tai monimutkainen. Se voi olla esimerkiksi yhden tai useamman putkijonon sekvenssi, jonka erottaa yksi operaattoreista ;
, &
, &&
, ||
tai uusi viiva. Alla olevat if
-olosuhteet ovat vain command-list1
-tapauksia:
-
if [ condition ]
[
on toinen nimi perinteiselletest
-komennolle.[
/test
on tavallinen POSIX-apuohjelma. Kaikissa POSIX-kuoreissa on se sisäänrakennettu (tosin POSIX² ei vaadi sitä).test
-komento asettaa poistumiskoodin jaif
-käskyn toimii tyypillisesti. Tyypillisiä testejä ovat, onko tiedosto olemassa vai onko yksi numero sama kuin toinen. -
if [[ condition ]]
Tämä on uusi päivitetty muunnelma kohteelle
test
¹ osoitteesta ksh , joka on bash , zsh , yash , busybox sh tukee myös. Tämä[[ ... ]]
-rakenne asettaa myös poistumiskoodin jaif
-lauseke toimii vastaavasti. Laajennettujen ominaisuuksiensa joukossa se voi testata, vastaako merkkijono jokerimerkkiä (ei busybox sh : ssä). -
if ((condition))
Toinen ksh -laajennus, jota myös bash ja zsh tukevat. Tämä suorittaa aritmeettisen arvon. Aritmeettisen toiminnan tuloksena asetetaan poistumiskoodi ja lauseke
if
toimii acco rdingly. Se palauttaa nollakoodin (tosi), jos aritmeettisen laskennan tulos on nolla. Kuten[[...]]
, tämä lomake ei ole POSIX eikä siksi ole kannettava. -
if (command)
Tämä suorittaa komennon alikuoressa. Kun komento on valmis, se asettaa poistumiskoodin ja lauseke
if
toimii vastaavasti.Tyypillinen syy tällaisen alikuoren käyttämiseen on rajoittaa
command
joscommand
vaaditaan muuttujien määrityksiä tai muita muutoksia kuoren ympäristöön. Tällaiset muutokset eivät jää alikuoren valmistumisen jälkeen. -
iv
if command
komento suoritetaan ja lauseke
if
toimii sen poistumiskoodin mukaan.
¹ vaikka se ei oikeastaan ole komento vaan erityinen kuorirakenne, jolla on oma erillinen syntaksinsa normaalin komennon kanssa, ja vaihtelee merkittävästi kuorintoteutusten välillä
² POSIX vaatii erillisen test
ja [
järjestelmän apuohjelmat, vaikka [
, useiden Linux-jakelujen tiedetään olevan m käyttää sitä.
Kommentit
- Kiitos, että sisällytit viidennen vaihtoehdon. Tämä ’ avain ymmärtämään, miten tämä todella toimii, ja on yllättävän alikäytetty.
- Huomaa, että
[
on itse asiassa binaarinen, ei sisäinen komento tai symboli. Asuu yleensä/bin
. - @JulienR. itse asiassa
[
on sisäänrakennettu, samoin kuintest
. Yhteensopivuussyistä on saatavana binaariversioita. Tutustuhelp [
jahelp test
. - Huomaa, että vaikka ((ei ole POSIX,
$((
ts. aritmeettinen laajennus on ja ’ on helppo sekoittaa ne. Usein kiertotapa on käyttää jotain[ $((2+2)) -eq 4 ]
käyttää aritmeettista lauseketta - toivon, että voisin äänestää tätä vastausta useammin kuin kerran.
vastaus
-
(…)
sulkeet osoittavat alikuori . Mikä niiden sisällä ei ole lauseke kuten monilla muilla kielillä. Se on luettelo komennoista (aivan kuin suluissa). Nämä komennot suoritetaan erillisessä aliprosessissa, joten sulkeissa suoritetuilla uudelleenohjauksilla, määrityksillä jne. Ei ole vaikutusta sulkeiden ulkopuolella.- Johtavan dollarin merkki,
$(…)
on -komennon korvaus : suluissa on komento ja komennon lähtö käytetään komentorivin osana (ylimääräisten laajennusten jälkeen, ellei korvaus ole lainausmerkkien välissä, mutta ”s toinen tarina ).
- Johtavan dollarin merkki,
-
{ … }
aaltosulkeet ovat kuin sulkeet siinä mielessä, että ne ryhmittävät komennot, mutta ne vaikuttavat vain jäsentämiseen, ei ryhmittelyyn. Ohjelmax=2; { x=4; }; echo $x
tulostaa 4, kun taasx=2; (x=4); echo $x
tulostaa 2. (Myös avainsanat olkaimet on erotettava ja löytyi komentoasemasta (siten välilyönti{
ja;
jälkeen}
) suluissa ei ”t”. Se on vain syntaksin oivallus.)- Johtavan dollarinmerkin kanssa
${VAR}
on parametrilaajennus , laajenee muuttujan arvoon mahdollisten ylimääräisten muunnosten avulla.ksh93
-kuori tukee myös${ cmd;}
-komennon korvaamisen muotoa, joka ei synny alikuorta.
- Johtavan dollarinmerkin kanssa
-
((…))
kaksoissulkeet ympäröivät aritmeettista käskyä eli kokonaislukujen laskentaa syntaksi, joka muistuttaa muita ohjelmointikieliä. Tätä syntaksia käytetään enimmäkseen tehtävissä ja ehdollisissa. Tämä on olemassa vain ksh / bash / zsh-tiedostoissa, ei tavallisessa sh: ssä.- Samaa syntaksia käytetään aritmeettisissa lausekkeissa
$((…))
, jotka laajenevat lausekkeen kokonaislukuun.
- Samaa syntaksia käytetään aritmeettisissa lausekkeissa
-
[ … ]
ympäröivät yksittäiset sulkeet ehdolliset lausekkeet . Ehdolliset lausekkeet rakennetaan enimmäkseen -operaattoreille , kuten-n "$variable"
testataksesi, onko muuttuja tyhjä, ja-e "$file"
testattaaksesi, onko tiedosto olemassa. Huomaa, että jokaisen ympärillä on välilyönti operaattori (esim.[ "$x" = "$y" ]
, ei[ "$x"="$y" ]
;
sekä suluissa että niiden ulkopuolella (esim.[ -n "$foo" ]
, ei[-n "$foo"]
-
[[ … ]]
kaksoissulkeet ovat vaihtoehtoinen ehdollisten lausekkeiden muoto muodossa ksh / bash / zsh, muutama lisäominaisuus, esimerkiksi voit kirjoittaa[[ -L $file && -f $file ]]
testataksesi, onko tiedosto symbolinen linkki tavalliseen tiedostoon, kun taas yksittäiset suluissa vaaditaan[ -L "$file" ] && [ -f "$file" ]
. Katso Miksi parametrin laajentaminen välilyönteillä ilman lainausmerkkejä toimii kaksoissulkeissa [[mutta ei yksittäisiä hakasulkeita [? ] saadaksesi lisätietoja tästä aiheesta.
Kuoressa jokainen komento on ehdollinen komento: jokaisella komennolla on palautustila, joka on joko 0, joka osoittaa onnistumisen, tai kokonaisluku välillä 1 ja 255 (ja mahdollisesti enemmän joissakin kuorissa), joka osoittaa epäonnistuminen. [ … ]
-komento (tai [[ … ]]
syntaksimuoto) on erityinen komento, joka voidaan myös kirjoittaa test …
ja onnistuu, kun tiedosto on olemassa, tai kun merkkijono ei ole tyhjä, tai kun numero on pienempi kuin toinen, jne. ((…))
-syntaksimuoto onnistuu, kun numero ei ole nolla .Tässä on muutama esimerkki komentosarjan ehdollisista:
-
Testaa, sisältääkö
myfile
merkkijonohello
:if grep -q hello myfile; then …
-
Jos
mydir
on hakemisto, vaihda se ja tee asioita:if cd mydir; then echo "Creating mydir/myfile" echo "some content" >myfile else echo >&2 "Fatal error. This script requires mydir to exist." fi
-
Testaa, onko tiedostoa nimeltä
myfile
nykyisessä hakemistossa:if [ -e myfile ]; then …
-
Sama, mutta myös riippuvia symbolisia linkkejä:
if [ -e myfile ] || [ -L myfile ]; then …
-
Testaa, onko
x
-arvon (jonka oletetaan olevan numeerinen) arvo vähintään 2, kannettavasti:if [ "$x" -ge 2 ]; then …
-
Testaa, onko
x
-arvon (jonka oletetaan olevan numeerinen) on vähintään 2, muodossa bash / ksh / zsh:if ((x >= 2)); then …
kommentit
- Huomaa, että yksi haarukointi tukee
-a
-tunnusta&&
, joten voidaan kirjoittaa:[ -L $file -a -f $file ]
, joka on sama määrä merkkejä sulkeissa ilman ylimääräisiä[
ja]
… - @AlexisWilke Operaattorit
-a
ja-o
ovat ongelmallinen, koska ne voivat johtaa virheellisiin jäsentämiseen, jos jotkut mukana olevista operandeista näyttävät operaattoreilta. Että ’ s miksi en mainitse niitä: heillä ei ole etua ja don ’ ei aina toimi. Älä koskaan kirjoita noteeraamattomia muuttujien laajennuksia ilman syytä:[[ -L $file -a -f $file ]]
on hieno, mutta yksittäisillä suluilla tarvitset[ -L "$file" -a -f "$file" ]
(mikä on ok, esim. div id = ”fbec67d83e”>
alkaa aina/
tai./
).
[[ -L $file && -f $file ]]
(ei -a
[[...]]
-vaihtoehto). Vastaa
[
vs [[
Tämä vastaus kattaa [
vs [[
kysymyksen osajoukko.
Joitakin eroja Bash 4.3.11:
-
POSIX vs Bash -laajennus:
-
[
on POSIX -
[[
on Bash-laajennus innoittamana f rom Korn -kuori
-
-
säännöllinen komento vs. taika
-
[
on vain tavallinen komento, jolla on outo nimi.]
on vain viimeinen argumentti[
.
Ubuntu 16.04: lla on itse asiassa suoritettava tiedosto osoitteessa
/usr/bin/[
, jonka tarjoaa coreutils , mutta bashin sisäänrakennettu versio on etusijalla.Mitään ei muuteta tavalla, jolla Bash jäsentää komennon.
Erityisesti
<
on uudelleenohjaus,&&
ja||
yhdistää useita komentoja,( )
tuottaa alikuoret, ellei\
vältty, ja sanojen laajentaminen tapahtuu tavalliseen tapaan. yksittäinen rakenne, joka tekeeX
: n jäsentämisen maagisesti.<
,&&
,||
ja()
käsitellään erityisesti, ja sananjakosäännöt ovat erilaiset.On myös muita eroja, kuten
=
ja=~
. -
Bashese: [
on sisäänrakennettu komento ja [[
on avainsana: https://askubuntu.com/questions/445749/whats-the-difference-between-shell-builtin-and-shell-keyword
<
-
[[ a < b ]]
: leksikografinen vertailu -
[ a \< b ]
: Sama kuin yllä.\
vaaditaan tai muuten ohjataan kuten muillekin komennoille. Bash-jatke. -
expr x"$x" \< x"$y" > /dev/null
tai[ "$(expr x"$x" \< x"$y")" = 1 ]
: POSIX-ekvivalentit, katso: https://stackoverflow.com/questions/21294867/how-to-test-strings-for-lexicographic-less-than-or-equal-in-bash/52707989#52707989
iv &&
ja ||
-
[[ a = a && b = b ]]
: tosi, looginen ja -
[ a = a && b = b ]
: syntaksivirhe,&&
jäsennetty AND-komennon erottajanacmd1 && cmd2
-
[ a = a ] && [ b = b ]
: luotettava POSIX-vastaava -
[ a = a -a b = b ]
: melkein vastaava, mutta POSIX hylkäsi sen, koska se on hullua ja epäonnistuu joidenkina
– taib
-arvojen kuten!
tai(
joka tulkitaan loogisiksi operaatioiksi
(
-
[[ (a = a || a = b) && a = b ]]
: väärä. Ilman( )
olisi totta, koska[[ && ]]
on suurempi etusija kuin[[ || ]]
-
[ ( a = a ) ]
: syntaksivirhe,()
tulkitaan alikuoreksi -
[ \( a = a -o a = b \) -a a = b ]
: vastaava, mutta()
,-a
ja-o
on vanhentunut kirjoittanut POSIX. Ilman\( \)
olisi totta, koska-a
on tärkeämpi kuin-o
-
{ [ a = a ] || [ a = b ]; } && [ a = b ]
ei-poistettu POSIX-vastaava. Tässä nimenomaisessa tapauksessa olisimme voineet kirjoittaa vain:[ a = a ] || [ a = b ] && [ a = b ]
, koska||
ja&&
kuorioperaattoreilla on sama etusija kuin toisin kuin[[ || ]]
ja[[ && ]]
ja-o
,-a
ja[
sananjako ja tiedostonimen luominen laajennusten yhteydessä (split + glob )
-
x="a b"; [[ $x = "a b" ]]
: true, lainausmerkkejä ei tarvita -
x="a b"; [ $x = "a b" ]
: syntakse virhe, laajenee[ a b = "a b" ]
-
x="*"; [ $x = "a b" ]
: syntaksivirhe, jos nykyisessä hakemistossa on enemmän kuin yksi tiedosto . -
x="a b"; [ "$x" = "a b" ]
: POSIX-vastaava
=
-
[[ ab = a? ]]
: true, koska se vastaa mallia (* ? [
ovat maagisia). Ei laajene kohtaan f kuvat nykyisessä hakemistossa. -
[ ab = a? ]
:a?
glob laajenee. Joten voi olla totta tai väärää nykyisessä hakemistossa olevista tiedostoista riippuen. -
[ ab = a\? ]
: väärä, ei globaalia laajennusta -
=
ja==
ovat samat sekä[
että[[
, mutta==
on Bash-laajennus. -
case ab in (a?) echo match; esac
: POSIX-vastaava -
[[ ab =~ "ab?" ]]
: false, menettää taikuuden""
kanssa Bash 3.2: ssa ja uudemmissa ja edellyttäen, että yhteensopivuus bash 3.1: n kanssa ei ole käytössä (kutenBASH_COMPAT=3.1
) -
[[ ab? =~ "ab?" ]]
: totta
=~
-
[[ ab =~ ab? ]]
: true, POSIX laajennettu säännöllinen lauseke vastaa,?
ei laajene globaalisti -
[ a =~ a ]
: syntaksivirhe. Ei bash-vastaavuutta. -
printf "ab\n" | grep -Eq "ab?"
: POSIX-vastaavuus (vain yhden rivin tiedot) -
awk "BEGIN{exit !(ARGV[1] ~ ARGV[2])}" ab "ab?"
: POSIX-vastaava.
Suositus: käytä aina []
Jokaiselle [[ ]]
rakenteelle, jonka olen nähnyt, on POSIX-ekvivalentteja.
Jos käytät [[ ]]
sinua:
- menetät siirrettävyyden
- pakota lukija oppimaan toisen bash-laajennuksen yksityiskohdat.
[
on vain tavallinen komento, jolla on outo nimi, eikä mitään erityistä semantiikkaa ole mukana.
Kiitos Stéphane Chazelas tärkeistä korjauksista ja lisäyksistä.
Kommentit
- @St é phaneChazelas kiitos tiedoista! Olen ’ lisännyt
expr
vastaukseen. Termi ” Bash ex jännityksen ” ei ole tarkoitettu tarkoittavan, että Bash oli ensimmäinen kuori, joka lisäsi syntaksin, POSIX sh vs Bashin oppiminen riittää jo hulluksi. - Katso
man test
jos yrititman [
ja eksyit. Se selittää POSIX-muunnelman. - Korjaus:
]
on argumentti komennolle[
, mutta se ei ’ älä estä uusien argumenttien käyttöä.]
on oltava viimeinen argumentti[
, mutta se voi esiintyä myös testilausekkeen osana. Esimerkiksiif [ "$foo" = ] ]; then
testaa, onko muuttujanfoo
arvoksi asetettu ”] ” (kutenif [ ] = "$foo" ]; then
). - kiitos @GordonDavisson, en ’ ei tiedä sitä, kiinteä.
- @ tgm1024 – Monica kohteli kyllä, se on myös pätevä huomio.
Vastaa
(list)
-luettelo suoritetaan alikuoren ympäristössä (katso alla KÄYTTÖÖNOTTOYMPÄRISTÖ). Muuttuvat määritykset ja sisäänrakennetut komennot, jotka vaikuttavat kuoren ympäristöön, eivät ole voimassa komennon valmistuttua. Palautustila on luettelon poistumistila.
Toisin sanoen varmista, että kaikella, mitä ”listassa” tapahtuu (kuten cd
), ei ole vaikutusta (
: n ja )
. Ainoa vuotava asia on viimeisen komennon poistumiskoodi tai set -e
ensimmäinen virheilmoituksen tuottava komento (muu kuin muutama, kuten if
, while
jne.)
((expression))
Lauseke arvioidaan alla aritmeettisen arvioinnin alla kuvattujen sääntöjen mukaisesti. Jos lausekkeen arvo ei ole nolla, palautustila on 0; muuten palautustila on 1. Tämä vastaa tarkalleen ” -lauseketta ”.
Tämä on bash-laajennus, jonka avulla voit tehdä matematiikkaa. Tämä on jonkin verran samanlainen kuin expr
-toiminnon käyttö ilman kaikkia expr
-rajoituksia (kuten tilojen pitäminen kaikkialla, pakeneminen *
jne.)
[[ expression ]]
Palauta tila 0 tai 1 riippuen ehdollisen lausekkeen ilmentymisen arviointi. Lausekkeet koostuvat alkuosista, jotka on kuvattu jäljempänä EHDOLLISET ILMOITUKSET -kohdassa. Sanojen jakamista ja polunimen laajentamista ei suoriteta sanojen [[ja]] välillä; Tilde-laajennus, parametrien ja muuttujien laajennus, aritmeettinen laajennus, komentojen korvaaminen, prosessin korvaaminen ja lainausten poisto suoritetaan. Ehdollisia operaattoreita, kuten -f, ei saa lainata, jotta ne tunnistetaan ensisijaisiksi.Kun sitä käytetään [[: n kanssa, < ja > -operaattorit lajittelevat leksikografisesti nykyistä aluetta.
Tämä tarjoaa edistyneen testin merkkijonojen, numeroiden ja tiedostojen vertailemiseksi vähän kuten test
tarjoaa, mutta tehokkaampaa.
[ expr ]
Palauta tila 0 (tosi) tai 1 (väärä) ehdollisen lausekkeen lausekkeen arvion mukaan. Jokaisen operaattorin ja operaattorin on oltava erillinen argumentti. Lausekkeet koostuvat pääolosuhteista, jotka on kuvattu yllä EHDOLLINEN ILMOITUS. test ei hyväksy mitään vaihtoehtoja eikä hyväksy ja sivuuttaa argumenttia – merkitsevän vaihtoehtojen loppua.[…]
Tämä kutsuu test
. Itse asiassa vanhoina aikoina [
oli symbolinen linkki osoitteeseen test
. Se toimii samalla tavalla ja sinulla on samat rajoitukset. Koska binaari tietää nimen, jolla se aloitettiin, testiohjelma tietää, milloin se aloitettiin nimellä [
, ja se voi jättää huomiotta sen viimeisen parametrin, jonka oletetaan olevan ]
. Hauskoja Unix-temppuja.
Huomaa, että bash
, [
ja test
ovat sisäänrakennettuja toimintoja (kuten kommentissa mainitaan), mutta melkein samat rajoitukset ovat voimassa.
Kommentit
- Vaikka
test
ja[
ovat tietysti sisäänrakennettuja komentoja Bashissa, mutta ’ on todennäköistä, että myös ulkoinen binääri on olemassa. -
[
: n ulkoinen binääri ei ole symbolinen linkkitest
-palveluun useimmissa nykyaikaisissa järjestelmissä. . - Minusta jotenkin tuntuu huvittavalta, että he vaivautuvat luomaan kaksi erillistä binääriä, joilla molemmilla on juuri tarvitsemansa, sen sijaan, että vain yhdistettäisiin ja lisätään pari ehdollista. Vaikka itse asiassa
strings /usr/bin/test
osoittaa, että siinä on myös ohjeteksti, en tiedä mitä sanoa. - @ Random832 saan mielipiteesi GNU: n perusteluista välttääksesi odottamattoman arg0-käyttäytymisen, mutta POSIX-vaatimuksista, en olisi ’ en ole niin myöntävä. Vaikka standardin mukaan
test
-komennon on ilmeisesti oltava olemassa itsenäisenä tiedostopohjaisena komennona, mikään siinä ei kerro sen[
-muunnosta. myös tällä tavoin. Esimerkiksi Solaris 11 ei tarjoa ’ ei mitään[
suoritettavaa tiedostoa, mutta on kuitenkin täysin POSIX-standardien mukainen - (exit 1) vaikuttaa sulkeiden ulkopuolella.
Vastaa
Joitakin esimerkkejä:
Perinteinen testi:
foo="some thing" # check if value of foo is not empty if [ -n "$foo" ] ; then... if test -n "$foo" ; then...
test
ja [
ovat komentoja kuten kaikki muutkin, joten muuttuja jaetaan sanoiksi, ellei se ole lainausmerkeissä.
Uuden tyylinen testi
[[ ... ]]
on (uudempi) erityinen kuorirakenne, joka toimii hieman eri tavalla, ilmeisin asia on, että se ei ”t-split-muuttujia:
if [[ -n $foo ]] ; then...
Jotkut dokumentaatio [
ja [[
täällä .
Aritmeettinen testi:
foo=12 bar=3 if (( $foo + $bar == 15 )) ; then ...
”Normaali ”komennot:
Kaikki yllä olevat toimivat normaalien komentojen tavoin, ja if
voi ottaa minkä tahansa komennon:
# grep returns true if it finds something if grep pattern file ; then ...
Useita komentoja:
Tai voimme käyttää useita komentoja. Käärimällä joukko komentoja ( ... )
suoritetaan ne alikuoressa ja luodaan väliaikainen kopio kuoren tilasta (työkansio, muuttujat). Jos tarvitsemme suorittaa jokin ohjelma väliaikaisesti toisessa hakemistossa:
# this will move to $somedir only for the duration of the subshell if ( cd $somedir ; some_test ) ; then ... # while here, the rest of the script will see the new working # directory, even after the test if cd $somedir ; some_test ; then ...
Vastaa
Ryhmittelykomennot
Bash tarjoaa kaksi tapaa ryhmitellä luettelo yksiköinä suoritettavista komennoista.
( list )
Komennoluettelon sijoittaminen sulkeiden väliin aiheuttaa alikuoren ympäristön luomisen ja kaikkien luettelon komentojen suorittamisen kyseisessä alikuoressa. Koska luettelo on alikuoressa suoritetut muuttujien määritykset eivät jää voimaan alikuoren valmistumisen jälkeen.
$ a=1; (a=2; echo "inside: a=$a"); echo "outside: a=$a" inside: a=2 outside: a=1
{ list; }
kiharoiden aaltosulkeiden välisten komentojen luettelo aiheuttaa luettelon suorittamisen nykyisessä komentotulkkiyhteydessä ”>
. Alikuorta ei luoda. Seuraava puolipiste (tai uusi viiva) vaaditaan. Lähde
${} Parameter expansion Ex: ANIMAL=duck; echo One $ANIMAL, two ${ANIMAL}s $() Command substitution Ex: result=$(COMMAND) $(()) Arithmetic expansion Ex: var=$(( 20 + 5 ))
Ehdolliset rakenteet
Yksittäinen haaroitus ie []
Vertailun vuoksi ==, !=, <,
ja >
ja niitä tulisi käyttää ja numeeriseen vertailuun eq, ne,lt
ja gt
tulisi käyttää.
Parannetut suluet ie [[]]
Kaikissa yllä olevissa esimerkeissä käytimme ehdollisen lausekkeen liitteenä vain yksittäisiä sulkeita, mutta bash sallii kaksoissulkeet, jotka toimivat yhden haarukon syntaksin parannettuna versiona.
Vertailun vuoksi ==, !=, <,
ja >
voivat käyttää kirjaimellisesti.
-
[
on testikomennon synonyymi. Vaikka se olisi sisäänrakennettu kuoreen, se luo uuden prosessin. -
[[
on sen uusi parannettu versio, joka on avainsana, ei ohjelma. . -
[[
ymmärretäänKorn
jaBash
.